实现数组转换为树形结构

要将数组转换为树形结构,通常需要一个数组,其中每个元素都包含一个父节点的引用。以下是一个使用JavaScript实现的示例,假设每个元素都有一个唯一的 `id` 和一个指向其父元素的`parentId`


function arrayToTree(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'] };

    const TreeItem = lookup[itemId];

    if (parentId === null) {
      rootItems.push(TreeItem);
    } else {
      if (!lookup[parentId]) lookup[parentId] = { ['children']: [] };

      lookup[parentId].children.push(TreeItem);
    }
  }

  return rootItems;
}

// 示例使用
const items = [
  { id: 1, parentId: null, name: "Root node" },
  { id: 2, parentId: 1, name: "Child node 1" },
  { id: 3, parentId: 1, name: "Child node 2" },
  { id: 4, parentId: 2, name: "Child node 1.1" }
];

const tree = arrayToTree(items);
console.log(tree);

这个函数首先创建一个查找表(lookup),用于存储每个节点及其子节点。然后,它遍历数组中的每个元素,将元素添加到其父节点的子节点数组中。如果父节点ID为null,则表示该节点是根节点。最后,返回包含所有根节点及其子节点的数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值