假设这样的结构:
[
{name: 'a', children: [{name: 'c', children: [...]}]},
{name: 'b', children: [{name: 'd', children: [...]}]}
]
可以说N级很深。
获取平面数组中所有元素的递归方法是什么?
[{name: a}, {name: b}, ...]
请注意,父母可以有多个孩子。
答案 0 :(得分:1)
你可以做这样的事情;
function recursivelyAdd(el, array) {
array.push(el);
for (var i=0; i< el.children.length; i++) {
recursivelyAdd(el.children[i], array);
}
delete el.children;
}
...请注意,它会修改现有对象,方法是删除处理后的“children”属性。如果您不想要,请删除delete el.children
行...
像这样使用它;
var ar = [];
recursivelyAdd(rootPerson, ar);
// ar will now be all the people!
答案 1 :(得分:1)
var struc = [
{name: 'a', children: [{name: 'c', children: []}]},
{name: 'b', children: [{name: 'd', children: []}]}
];
function getNames(children) {
return children.reduce(function(names, child) {
return names.concat(child.name, getNames(child.children));
}, []);
};
getNames(struc);
// ["a", "c", "b", "d"]
此答案将删除循环并且不会修改原始对象。