使用嵌套的对象列表展平对象列表

时间:2016-02-22 18:40:28

标签: javascript underscore.js

我有以下形式的JavaScript列表:

var list = [{id:1, data: "string", list: [
              {id:2, data: "string", list: [
                {id:3, data: "string", list: null}]},
              {id:4, data: "string", list: null}]}];

我希望它的形式为:

var list = [{id:1, data: "string", list: \\ original nested list or null, I don't care},
            {id:2, data: "string", list:},
            {id:3, data: "string", list:},
            {id:4, data: "string", list:}];

我可以访问underscore.js,但是我无法生成我想要的输出。 我尝试使用_.flatten_.pluck的组合来获取基础列表,但我还需要id属性,因此这不起作用。 我的猜测是我需要映射一个函数,但我现在对这个问题感到很失望。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

您可以使用递归来执行此操作:

function flatten(arr) {
    if (!arr) {
        return [];
    }
    return arr.reduce(function (r, i) {
        return r.concat([i]).concat(flatten(i.list));
    }, []);
}

console.log(flatten(list));

使用ES6语法(箭头函数和扩展运算符),它可能如下所示:

function flatten(arr) {
    return arr ? arr.reduce((r, i) => [...r, i, ...flatten(i.list)], []) : [];
}