首页 > 解决方案 > 该算法是否有将列表转换为树的名称?

问题描述

这是 Nina Scholz 发布的算法,它将具有level属性的已排序元素数组转换为树状结构:

链接:https ://stackoverflow.com/a/44519904/8252267

let exampleList = [{
  id: 1,
  level: 1
}, {
  id: 2,
  level: 2
}, {
  id: 3,
  level: 2
}, {
  id: 4,
  level: 3
}, {
  id: 5,
  level: 3
}, {
  id: 6,
  level: 1
}]

function getTree(array) {
  var levels = [{}];
  array.forEach(function(a) {
    levels.length = a.level;
    levels[a.level - 1].nodes = levels[a.level - 1].nodes || [];
    levels[a.level - 1].nodes.push(a);
    levels[a.level] = a;
  });
  return levels[0].nodes;
}

/*
result:

[
  {
    "id": 1,
    "level": 1,
    "nodes": [
      {
        "id": 2,
        "level": 2
      },
      {
        "id": 3,
        "level": 2,
        "nodes": [
          {
            "id": 4,
            "level": 3
          },
          {
            "id": 5,
            "level": 3
          }
        ]
      }
    ]
  },
  {
    "id": 6,
    "level": 1
  }
]
*/


它是 Nina 的原创,还是用于(可能)非常常见的任务的众所周知的算法?我在这里找到了答案,其中算法(创建嵌套的 html 列表)似乎非常相似。

这个算法有名字吗?

标签: javascriptalgorithmtree

解决方案


推荐阅读