我有以下形式的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
属性,因此这不起作用。
我的猜测是我需要映射一个函数,但我现在对这个问题感到很失望。
有人可以帮我吗?
答案 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)], []) : [];
}