首页 >web前端 >js教程 >如何在 JavaScript 中有效地将分层数据的平面数组转换为嵌套树结构?

如何在 JavaScript 中有效地将分层数据的平面数组转换为嵌套树结构?

Barbara Streisand
Barbara Streisand原创
2024-12-19 22:30:11579浏览

How Can I Efficiently Convert a Flat Array of Hierarchical Data into a Nested Tree Structure in JavaScript?

在 JavaScript 中从平面数组数据构建树结构

处理复杂的分层数据时,有必要将其组织成树 -类似于分析和演示的结构。在本例中,有序 JSON 文件包含数据,每个条目都有 id、parentId、级别和文本。任务是将这种平面数据结构转换为嵌套层次结构。

为了有效地实现这种转换,利用地图查找策略非常重要。这涉及创建一个映射,将每个 id 映射到其在列表中的索引。通过利用此映射,可以一次性构建嵌套层次结构,从而无需多次循环。

以下 JavaScript 函数演示了构建树结构的映射查找方法:

function list_to_tree(list) {
  var map = {}, node, roots = [], i;
  
  for (i = 0; i < list.length; i += 1) {
    map[list[i].id] = i; // initialize the map
    list[i].children = []; // initialize the children
  }
  
  for (i = 0; i < list.length; i += 1) {
    node = list[i];
    if (node.parentId !== "0") {
      // if you have dangling branches check that map[node.parentId] exists
      list[map[node.parentId]].children.push(node);
    } else {
      roots.push(node);
    }
  }
  return roots;
}

通过创建一个映射来快速访问父节点并初始化每个节点的子列表,该函数可以有效地合并两个 for 循环。此方法支持多个根,并且可以处理悬挂分支或通过简单的修改忽略它们。

要演示该函数的功能,您可以使用以下输入执行它:

var entries = [{
    "id": "12",
    "parentId": "0",
    "text": "Man",
    "level": "1",
    "children": null
  },
  {
    "id": "6",
    "parentId": "12",
    "text": "Boy",
    "level": "2",
    "children": null
  },
  {
    "id": "7",
    "parentId": "12",
    "text": "Other",
    "level": "2",
    "children": null
  },
  {
    "id": "9",
    "parentId": "0",
    "text": "Woman",
    "level": "1",
    "children": null
  },
  {
    "id": "11",
    "parentId": "9",
    "text": "Girl",
    "level": "2",
    "children": null
  }
];

console.log(list_to_tree(entries));

这将输出具有节点之间预期关系的分层树结构。通过利用地图查找策略,这种方法提供了一种高效灵活的解决方案,用于将平面分层数据转换为结构良好的树形数组。

以上是如何在 JavaScript 中有效地将分层数据的平面数组转换为嵌套树结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn