自学内容网 自学内容网

js list to tree

在JavaScript中,将列表转换为树结构是一种常见的操作,尤其是在处理需要层级展示的数据,如菜单、分类等。这通常涉及到递归函数和对象的引用。以下是一个简单的例子,展示了如何将一个扁平化的列表转换为多层级树结构。
假设我们有以下这样的列表,每个节点有一个 `id` 和一个 `parentId`,表示它的父节点的ID:

const list = [
  { id: 1, parentId: null },
  { id: 2, parentId: 1 },
  { id: 3, parentId: 1 },
  { id: 4, parentId: 2 },
  { id: 5, parentId: 2 },
  { id: 6, parentId: 3 },
];


我们的目标是将这个列表转换成如下所示的树结构:

const tree = [
  {
    id: 1,
    parentId: null,
    children: [
      {
        id: 2,
        parentId: 1,
        children: [
          { id: 4, parentId: 2 },
          { id: 5, parentId: 2 }
        ]
      },
      {
        id: 3,
        parentId: 1,
        children: [
          { id: 6, parentId: 3 }
        ]
      }
    ]
  }
];


以下是将列表转换为树的JavaScript函数:

function listToTree(items) {
  const rootItems = [];
  const lookup = {};
  for (const item of items) {
    const itemId = item['id'];
    const parentId = item['parentId'];
    if (!lookup[itemId]) lookup[itemId] = { ['children']: [] };
    lookup[itemId] = { ...item, children: lookup[itemId]['children'] };
    if (parentId === null) {
      rootItems.push(lookup[itemId]);
    } else {
      if (!lookup[parentId]) lookup[parentId] = { ['children']: [] };
      lookup[parentId]['children'].push(lookup[itemId]);
    }
  }
  return rootItems;
}
const tree = listToTree(list);
console.log(JSON.stringify(tree, null, 2));


这个函数首先创建一个空的对象 `lookup` 来存储列表中每个元素的引用,并最终用它来构建树。然后,它遍历列表,对于每个元素,将其添加到 `lookup` 对象中,并根据其 `parentId` 将其作为子元素添加到相应的父元素中。最后,函数返回根元素数组 `rootItems`,它包含了整个树结构。
 


原文地址:https://blog.csdn.net/qq_34874784/article/details/140275294

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!