这种展平的递归版本?

时间:2014-08-29 16:10:55

标签: javascript recursion

假设这样的结构:

[
{name: 'a', children: [{name: 'c', children: [...]}]}, 
{name: 'b', children: [{name: 'd', children: [...]}]}
]

可以说N级很深。

获取平面数组中所有元素的递归方法是什么?

[{name: a}, {name: b}, ...]

请注意,父母可以有多个孩子。

2 个答案:

答案 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"]

此答案将删除循环并且不会修改原始对象。