簡體   English   中英

基於類型更改 object 到 javascript 中的嵌套數組

[英]Based on type change object to nested array in javascript

如何通過輸入 javascript 將嵌套的 object 更改為數組 object。

基於 object 鍵值類型,如果其數組/字符串將 object 更改為數組,如下所示 javascript

var ob1 = {
  "list": [
    "service",
    "finance",
    "s1.jpg"
  ],
  "info": [
    "details",
    "mail",
    "s2.jpg"
  ]
}

var ob2 = {
   key1: "v1",
   key2: "v2"
}
var result1=this.modifyObject(ob1);
var result2=this.modifyObject(ob2);

function modifyObject(ob){
  const { field, value, id, ...fields } = ob;
  const rest = Object.entries(fields)
  .map(([field, value], id) => ({ field, value, id }));
  const result = [...rest];
  return result;
}


預計Output,

// object type value is array
[
 {field: "list", value: ["service","finance"], image: "s1.jpg", id:0},
 {field: "info", value: ["details","mail"], image: "s2.jpg", id:1}
]


// object type value is string
[
 {field:"key1", value:"v1", id:0 },
 {field:"key2", value:"v2", id:1 }
]

您可以使用Object.entries()和 map 將每個[key, value]對獲取整個輸入 object 到一個新的 object。您可以通過檢查[key, value] ] 中的第二個值是否確定要返回的 object 的類型[key, value] pair array 是一個數組(即:檢查值是否是一個數組)通過使用Array.isArray() 如果是數組,可以設置value為數組,image為最后一個元素(使用.pop()獲取,如果不想修改原來的object可以用slice代替) . 否則,如果元素不是數組,則可以返回一個具有id屬性的 object。 id屬性基於映射 function 中 object 的索引。

請參見下面的示例:

 const ob1 = { "list": [ "service", "finance", "s1.jpg" ], "info": [ "details", "mail", "s2.jpg" ] }; const ob2 = { key1: "v1", key2: "v2" }; const modifyObject = obj => Object.entries(obj).map(([field, value], id) => Array.isArray(value)? {field, value, image: value.pop()}: {field, value, id} ); const result1 = modifyObject(ob1); const result2 = modifyObject(ob2); console.log(result1); console.log(result2);

請注意,此id屬性基於Object.entries()如何從您的 object 獲取鍵值對的順序,因此它可能在舊瀏覽器中有所不同(最新的 JS 規范指定了 [key, value] 如何排序對是使用 Object.entries 獲得的,但較舊的瀏覽器可能不遵循此)

您可以使用 function Array.prototype.entries和 function Array.prototype.reduce來構建所需的 output。

 let ob1 = { "list": [ "service", "finance", "s1.jpg" ], "info": [ "details", "mail", "s2.jpg" ]}, ob2 = { key1: "v1", key2: "v2"}; function modifyObject(obj) { return Object.entries(obj).reduce((r, [field, value], id) => { let [image] = Array.isArray(value)? value.slice(-1): []; let v = Array.isArray(value)? value.slice(0, value.length - 1): value; return r.concat(Object.assign({id, [field]: v}, image? {image}: {})); }, []); } console.log(modifyObject(ob1)); console.log(modifyObject(ob2));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM