假设我们的数组是这样的
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的孩子。
1:
有3个孩子,这意味着2,3和4是其孩子。
如何有效地合并它们,这样我就可以做到
{
data: 0 data
children: [
{
data: 1:data,
children: {
{
data: 2:data,
children: similar..
},
{
data: 3:data,
children: similar
}
}
}
]
}
我尝试遍历for循环,但是将子代添加到新变量的部分是如此混乱。
谢谢
答案 0 :(得分:1)
通过使用精美的嵌套数组,我将子级索引添加到了每个对象中。
通过在第一个索引处进行迭代来构建树,并使用嵌套项的索引从数组中获取所有子项。
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; }