【发布时间】:2019-05-07 09:46:16
【问题描述】:
我需要访问 JavaScript 对象数组的属性并将其转换为新数组。数组采用这样的形式。
Company = [
{
name:"A",
items:[
{ name:"AA",
items:[
{ name:"AAA",
items:[...]
},
{ name:"AAB",
items:[...]
}
]
},
{ name:"AB",items:[{},{}]}
]
},
{
name:"B", items:[{ name:"BA",items:[{...},{...}]},{ name:"BB",items:[{...},{...}]}]
},
{
name:"C", items:[{ name:"CA",items:[{...},{...}]},{ name:"CB",items:[{...},{...}]}]
}
........
];
我需要把它转换成这样的结构。
Company = [
{ title: 'A',
children: [
{ title: 'AA',
children: [{ title: 'AAA',children: [..] }]
},
{ title: 'AB', children: [{ title: 'ABA',children: [..] }
]
},
{ title: 'B',
children: [
{ title: 'BA',
children: [{ title: 'BAA',children: [..] }]
},
{ title: 'BB', children: [{ title: 'BBA',children: [..] }
]
},
.........
]
我尝试使用 ES6 Map、Reducer、Filter 和 lodash 来转换数组,但我做不到。关于如何实现这一目标的任何想法?这是我到目前为止尝试过的内容
function checkitems(data){
if (typeof data.items !== "undefined" || data.items.length > 0) {
data.items.map(dept => {
return {
title: dept.name,
children: checkitems(dept)
};
});
}
return;
}
company.map((dept)=>{
return {
title:dept.name,
children: checkitems(dept)
}
});
【问题讨论】:
-
请提供使用 Map reduce 和 filter 的代码以及您尝试过的代码。
-
只要有“n”层
children,你就需要递归来解决这个问题 -
@DTul 我更新了我的问题
-
@messerbill 我用递归更新了我的问题
标签: javascript recursion ecmascript-6 lodash