我正在尝试将JSON转换为嵌套数组格式。以下是我的JSON数据:
{
"items": {
"BMW": {
"group": "car",
"title": "BMW car"
},
"320": {
"group": "BMW",
"title": "320 Mod"
},
"X3": {
"group": "BMW",
"title": "X3"
},
"X5": {
"group": "BMW",
"title": "X5 Mod"
},
"Ford": {
"group": "car",
"title": "Ford car"
},
"Fiesta": {
"group": "Ford",
"title": "Fiesta Mod"
},
"Focus": {
"group": "Ford",
"title": "Focus Mod"
}
}
}
JSON数据具有组。基于该组,我需要动态转换为所需的数组格式。下面的数组是我的预期输出。谁能帮我用打字稿写程序。
arrayObj = [
{
Name: "BMW car",
id:"BMW",
group: "car",
children: [
{ Name: "320 Mod", id:"320", group: "BMW" },
{ Name: "X3 Mod", id:"X3", group: "BMW" },
{ Name: "X5 Mod", id:"X5", group: "BMW" }
]
},
{
Name: "Ford car",
group: "car",
id: "Ford",
children: [
{ Name: "Fiesta Mod", id:"Fiesta", group: "Ford" },
{ Name: "Focus Mod", id:"Focus", group: "Ford" }
]
}
];
答案 0 :(得分:1)
您可以使用reduce()
函数来实现此目的,请参见下面的代码
const initialObject = {
"items": {
"BMW": {
"group": "car",
"title": "BMW"
},
"320": {
"group": "BMW",
"title": "320"
},
"X3": {
"group": "BMW",
"title": "X3"
},
"X5": {
"group": "BMW",
"title": "X5"
},
"Ford": {
"group": "car",
"title": "Ford"
},
"Fiesta": {
"group": "Ford",
"title": "Fiesta"
},
"Focus": {
"group": "Ford",
"title": "Focus"
}
}
}
const finalData = Object.values(Object.values(initialObject.items).reduce((prev, {group, title}) => {
let children = prev[group]?.children
if (!children) {
children = []
}
children.push({name: title, group })
return {...prev, [group]: {
name: group,
group:title,
children
}}
}, {}))
console.log(finalData)