Xav*_*aut 2 javascript recursion
我有点暗示递归。我正在从API接收数据。看起来像这样:
const input = [
{ id: 'a', level: 0 },
{ id: 'b', level: 1 },
{ id: 'c', level: 1 },
{ id: 'd', level: 2 },
{ id: 'e', level: 1 },
{ id: 'f', level: 0 },
];
Run Code Online (Sandbox Code Playgroud)
我需要类似的东西
const out = [
{ id: 'a', nodes: [
{ id: 'b', nodes: [] },
{ id: 'c', nodes: [
{ id: 'd', nodes: [] },
] },
{ id: 'e', nodes: [] },
] },
{ id: 'f', nodes: [] },
];
Run Code Online (Sandbox Code Playgroud)
您将如何以一种优雅的方式实现这一目标out = f(input)?
我觉得我们可以通过reduce来做一个递归的嵌套方法,但是我没有设法做到这一点:)
提前致谢!
您可以对对象使用具有最新array / nodes属性的级别的辅助数组。
const
input = [{ id: 'a', level: 0 }, { id: 'b', level: 1 }, { id: 'c', level: 1 }, { id: 'd', level: 2 }, { id: 'e', level: 1 }, { id: 'f', level: 0 }],
result = [],
levels = [result];
input.forEach(({ id, level }) =>
levels[level].push({ id, nodes: levels[level + 1] = [] })
);
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)