javascript - 将具有级别信息的平面数组重新排列到具有子级的 n 叉树中
问题描述
给定一个级别格式的数组,它们的直接子节点存储在一个连续数组中,返回一个 n 叉树
给定输入格式:
[{'name':'a', 'level': -1},
{'name':'b', 'level': 0},
{'name':'c', 'level': 1},
{'name':'d', 'level': 2},
{'name':'e', 'level': 0},
{'name':'f', 'level': 1},
{'name':'g', 'level': 0}
];
预期输出应采用以下格式:
[
{
name:"a",
level:-1,
children: [
{
name:"b",
level:0,
children: [
{
name:"c",
level:1,
children: [
{
name:"d",
level:2,
children: [ ]
}
]
}
]
}
],
},
{
name:"e",
level:1,
children: [
{
name:"f",
level:2,
children: [ ]
}
]
},
{
name:"g",
level:2,
children: [ ]
}
]
我尝试实现的递归解决方案失败了
上面的代码返回
function treeTraversal(arr, index) {
if (arr === null || arr.length === 0 || index === arr.length) {
return;
}
let result = [];
let children = [];
if (arr[index - 1].level + 1 === arr[index].level) {
children.push(arr[index]);
console.log(children);
treeTraversal(arr, index + 1);
}
arr[index - 1].children = children;
result.push(arr[index - 1]);
return result;
}
const arr = [{
'name': 'a',
'level': -1
},
{
'name': 'b',
'level': 0
},
{
'name': 'c',
'level': 1
},
{
'name': 'd',
'level': 2
},
{
'name': 'e',
'level': 0
},
{
'name': 'f',
'level': 1
},
{
'name': 'g',
'level': 0
}
];
console.log(treeTraversal(arr, 1));
意想不到的结果。请让我知道上面的代码有什么问题
解决方案
您可以为关卡获取一个辅助数组,并将对象分配给关卡的最新数组加一。
var data = [{ name: 'a', level: -1 }, { name: 'b', level: 0 }, { name: 'c', level: 1 }, { name: 'd', level: 2 }, { name: 'e', level: 0 }, { name: 'f', level: 1 }, { name: 'g', level: 0 }],
tree = [],
levels = [tree];
data.forEach(o => levels[o.level + 1].push({ ...o, children: levels[o.level + 2] = [] }));
console.log(tree);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- python - 子进程标准输出中的“列表索引超出范围”
- python - 删除所有列python中的数字
- python - TensorFlow RuntimeError:“尝试在不构建函数的情况下捕获 EagerTensor”
- java - 如何在java中搜索某个日期和时间(从用户输入)的文件
- rust - 如何使用 Rust fltk 表示例绘制自己的字符串数组?
- javascript - 如何在不调用的情况下传递函数/闭包?
- google-cloud-platform - 为什么 Google OAuth 同意屏幕设置页面上没有保存按钮
- netlogo - 每次重复后的 Netlogo BehaviorSpace 平均值
- java - dataSnapshot 无法获取父推送键值
- string - 在字符串插值中使用非字符串变量时如何生成警告/错误?