![](/img/trans.png)
[英]How to change the nested array object to object depending on type in 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.