javascript - 通过检查嵌套级别附加对象数组:Javascript
问题描述
我有一个嵌套的对象数组,格式如下
const arr1 = [
{
name: "internalcorp.com",
children: [
{
name: "internalcorp.com.child1",
children: [
{
name: "internalcorp.com.grandchild1",
children: []
},
{
name: "internalcorp.com.grandchild2",
children: []
}
]
},
{
name: "internalcorp.com.child2",
children: []
}
]
},
{
name: "internalcorpwebsite.com",
children: [
{
name: "internalcorpwebsite.com.child1",
children: []
}
]
}
];
需要className
根据其级别为每个数组对象添加一个属性。例如,父项应该有level-0 group
,子项应该有level-x leaf
,其中 x 是相对于主要父项的级别编号。
输出应该看起来像
const result = [
{
name: "internalcorp.com",
className: "level-0 group",
children: [
{
name: "internalcorp.com.child1",
className: "level-1 leaf",
children: [
{
name: "internalcorp.com.grandchild1",
className: "level-2 leaf",
children: []
},
{
name: "internalcorp.com.grandchild2",
className: "level-2 leaf",
children: []
}
]
},
{
name: "internalcorp.com.child2",
className: "level-1 leaf",
children: []
}
]
},
{
name: "internalcorpwebsite.com",
className: "level-0 group",
children: [
{
name: "internalcorpwebsite.com.child1",
className: "level-1 leaf",
children: [],
}
],
}
];
我尝试过的代码
const result = arr1.map((item,idx)=> {
if(item.children.length){
return {
...item,
className: `level${idx} leaf`
}
}
})
解决方案
您可以使用递归的力量:
function recursive(item, id) {
let returnedItem = item
if (item.children.length) {
returnedItem = {
...returnedItem,
children: returnedItem.children.map(childItem => recursive(childItem, id + 1))
}
}
if (0 === id) {
return { ...returnedItem, className: `level-0 group` }
}
return { ...returnedItem, className: `level-${id} leaf` }
}
const result = arr1.map(item => recursive(item, 0))
推荐阅读
- c# - EF Core - 使用 Automapper 从 OData 返回映射的多对多关系
- r - 在 R Markdown 脚注中包含一个块
- c++ - 视差图后过滤
- php - Readfile 是下载外部文件的最佳解决方案?
- karate - 我们可以在 BlazeMeter 中执行空手道加特林测试吗?
- node.js - 将节点版本降级到 10.13.0
- android - 如何在android中的手势描述可访问性中使向下滑动手势(滚动)连续
- string - Julia 将符号转换为字符串
- node.js - Mongodb/Mongoose - 聚合以将同一集合中的所有匹配文档分组到一个数组中
- angular - 带有 Angular 9 的 AmCharts:加载 csv 数据,图表为空白