arrays - 如何在打字稿中将 JSON 转换为嵌套数组格式?
问题描述
我正在尝试将 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" }
]
}
];
解决方案
您可以使用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)
推荐阅读
- c - mingw64 pjsip sizeof(fd_set) 总是双倍 sizeof(pj_fd_set_t) 导致 sock_select.c 中的断言
- python-3.x - 将大于 A 的值替换为 B,将小于 C 的值替换为 D
- c# - 在 C# 中有效电子邮件地址的域部分添加“test-”
- swiftui - 如何在 SwiftUI NavigationButton 中包装文本?
- sql - BigQuery/我无法正确使用“in”子句
- r - 使用赋值运算符在 R 的 for 循环中创建多个 df
- c# - MVC 在使用 API 调用时允许 XSS 攻击
- python - 装饰器停止自动运行
- c# - Asp.Net Core Identity 获取整数用户 ID
- c# - 使用静态代码为应用创建 Web API