为了账号安全,请及时绑定邮箱和手机立即绑定

将带有级别信息的平面数组重新排列成带有子节点的 n 叉树

将带有级别信息的平面数组重新排列成带有子节点的 n 叉树

青春有我 2022-12-18 16:33:48
给定一个级别格式的数组,它们的直接子级存储在一个连续的数组中,返回一个 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));意想不到的结果。请让我知道上面的代码有什么问题
查看完整描述

1 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

您可以为级别获取一个辅助数组,并将对象分配给该级别的最新数组加一。


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; }


查看完整回答
反对 回复 2022-12-18
  • 1 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号