[["seller" , [["id" , "1"], ["name", "test"]]], ["token", "aasfgsgd"], ["settings", [["general", false], ["store", [["trusted", true], ["socialMedia", [["fbConnected", true], ["igConnected", false]]]]]]]]
此嵌套数组可以是变量,因此将其转换为如下所示的对象
{
"seller": {
"id": 1,
"name": "test"
},
"token": "aasfgsgd",
"settings": {
"general": false,
"store": {
"trusted": true,
"socialMedia": {
"fbConnected": true,
"igConnected": false
}
}
}
}
答案 0 :(得分:1)
您可以将Object.fromEntries()
与递归函数一起使用,以将所有嵌套的[[key, value], ...]
对数组转换为对象本身。
Object.fromEntries()
方法可以采用一个数组,例如:
[["key", "val2"]]
...并将其转换为对象:
{
"key": "val2"
}
但是,如果"val2"
本身是数组,则需要先将其转换为对象。这可以通过在数组的值条目上递归调用Object.fromEntries()
来完成。
请参见以下示例:
const arr = [["seller" , [["id" , 1], ["name", "test"]]], ["token", "aasfgsgd"], ["settings", [["general", false], ["store", [["trusted", true], ["socialMedia", [["fbConnected", true], ["igConnected", false]]]]]]]];
const makeObject = arr => {
return Object.fromEntries(arr.map(
([key, val]) => Array.isArray(val) ? [key, makeObject(val)] : [key, val]
));
}
console.log(makeObject(arr));
一种对浏览器更友好的方法是将.reduce()
与spread syntax一起使用,而不是Object.fromEntries()
:
const arr = [["seller" , [["id" , 1], ["name", "test"]]], ["token", "aasfgsgd"], ["settings", [["general", false], ["store", [["trusted", true], ["socialMedia", [["fbConnected", true], ["igConnected", false]]]]]]]];
const makeObject = arr => {
return arr.reduce((o, [key, val]) => {
return Object.assign(o, {[key]: Array.isArray(val) ? makeObject(val) : val});
}, {});
}
console.log(makeObject(arr));
答案 1 :(得分:0)
const array = [["seller" , [["id" , "1"], ["name", "test"]]], ["token", "aasfgsgd"], ["settings", [["general", false], ["store", [["trusted", true], ["socialMedia", [["fbConnected", true], ["igConnected", false]]]]]]]];
function objectify(arr) {
return arr.reduce((acc, item) => {
let builder;
if (Array.isArray(item[0])) {
builder = objectify(item[0])
} else {
const propName = item[0];
const propValue = Array.isArray(item[1]) ? objectify(item[1]) : item[1];
builder = {[propName]: propValue};
}
return {
...acc,
...builder
}
}, {});
}
console.log(objectify(array));