【发布时间】:2018-05-02 15:34:44
【问题描述】:
我希望将此平面数组转换为嵌套数组,但它一直返回为空。不知道如何解决这个问题或我错过了什么,但这让我发疯。
平面数组:
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 nest = getNestedChildren(names, names.parent);names.parent是什么?undefined? -
您必须遍历名称并为每个名称调用父名称[0].parent(否则它未定义)
-
我正在尝试进入数组的根级别。有什么想法吗?
-
@user992731 使用 0 获取根级别。请参阅下面的答案
-
另外,这对您来说可能很有趣:how-to-group-an-array-of-objects-by-key(先复制错误链接,已编辑)
标签: javascript arrays multidimensional-array nested