使用嵌套的对象列表展平对象列表
flatten a list of objects with nested lists of objects
我有一个 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
属性 所以这不起作用。
我的猜测是我需要映射一个函数,但我现在有点迷失在这个问题上。
有人可以帮我解决这个问题吗?
你可以使用递归来完成:
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)], []) : [];
}
我有一个 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
属性 所以这不起作用。
我的猜测是我需要映射一个函数,但我现在有点迷失在这个问题上。
有人可以帮我解决这个问题吗?
你可以使用递归来完成:
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)], []) : [];
}