从平面数组数据生成树



假设我们的数组是这样的

0: (1) [{…}]
1: (3) [{…}, {…}, {…}]
2: [{…}]
3: (2) [{…}, {…}]
4: (2) [{…}, {…}]
5: (3) [{…}, {…}, {…}]
6: (2) [{…}, {…}]
7: (2) [{…}, {…}]
8: (2) [{…}, {…}]
9: (2) [{…}, {…}]
10: (2) [{…}, {…}]
11: (2) [{…}, {…}]
12: (3) [{…}, {…}, {…}]
13: (2) [{…}, {…}]
14: (2) [{…}, {…}]
15: (3) [{…}, {…}, {…}]
16: [{…}]

这是完整的文件https://pastebin.com/GSePG9qN。它很大,所以我把它截断了。

从上面的数组中我们可以看出0:有1个子代,这意味着1是0的子代。CCD_ 2有3个孩子,即2、3和4个是它的孩子。

我如何有效地合并它们,这样我就可以像这个一样

{
data: 0 data
children: [
{
data: 1:data,
children: {
{
data: 2:data,
children: similar..
},
{
data: 3:data,
children: similar
}
}
}
]
}

我试着迭代for循环,但我们向新变量添加子项的部分太令人困惑了。

感谢

通过使用花哨的嵌套数组,我为每个对象添加了子索引。

通过在第一个索引处迭代来构建树,并且通过使用嵌套项的索引从数组中获取所有子项。

const buildTree = o => Object.assign({}, o, { children: (data[o.children] || []).map(buildTree) })
var data = [
[{ id: 0 }],
[{ id: 1 }, { id: 2 }, { id: 3 }],
[{ id: 4 }],
[{ id: 5 }, { id: 6 }],
[{ id: 7 }, { id: 8 }],
[{ id: 9 }, { id: 10 }, { id: 11 }],
[{ id: 12 }, { id: 13 }],
[{ id: 14 }, { id: 15 }],
[{ id: 16 }, { id: 17 }],
[{ id: 18 }, { id: 19 }],
[{ id: 20 }, { id: 21 }],
[{ id: 22 }, { id: 23 }],
[{ id: 24 }, { id: 25 }, { id: 26 }],
[{ id: 27 }, { id: 28 }],
[{ id: 29 }, { id: 30 }],
[{ id: 31 }, { id: 32 }, { id: 33 }],
[{ id: 34 }]
],
result;
data.forEach((i => a => a.forEach(o => o.children = ++i))(0));
result = data[0].map(buildTree);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

最新更新