我希望将这个平面数组转换为嵌套数组,但它始终返回为空。不知道如何解决这个问题或我缺少什么,但这让我发疯。
平面数组:
var names =[
{ name: 'b', parent: 'Brown' },
{ name: 'a', parent: 'Brown' },
{ name: 'h', parent: 'Green' },
{ name: 'c', parent: 'Green' },
];
所需的数组输出:
[{
name: 'Brown',
children: [{
name: 'a',
children: []
},
{
name: 'b',
children: []
}
]
}, {
name: 'Green',
children: [{
name: 'h',
children: []
},
{
name: 'c',
children: []
}
]
}
}]
Js:
function getNestedChildren(arr, parent) {
var children = [];
for(var i =0; i < arr.length; ++i) {
if(arr[i].parent == parent) {
var grandChildren = getNestedChildren(arr, arr[i].name)
if(grandChildren.length) {
arr[i].children = grandChildren;
}
children.push( arr[i]);
}
}
return children;
}
var nest = getNestedChildren(names, names.parent);
console.log( nest);
最佳答案
var names =[
{ name: 'b', parent: 'Brown' },
{ name: 'a', parent: 'Brown' },
{ name: 'h', parent: 'Green' },
{ name: 'c', parent: 'Green' },
{ name: 'j', parent: 'Brown' }
];
function groupBy(arr, f) {
return arr.reduce((r, v, i, a, k = f(v)) => ((r[k] || (r[k] = [])).push(v), r), {});
}
function nestArray(array){
var newArray=[],
resultGrouped = groupBy(names, function(c) {
return c.parent
});
for (var key in resultGrouped){
var item=resultGrouped[key];
newArray.push({
name:key,
children:item.map(function(map){
delete map.parent;
map.children=[];
return map;
})
});
}
return newArray;
}
console.log(nestArray(names));
关于javascript - 使用 javascript 将平面数组转换为嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50138420/