javascript数组数据转树形结构 通过new Map保存数据,及递归生成树

function setArrayTree(arr, parentIds, id) {
  //arr:数组 parentIds:用于确定父子关系的键  id:当前数据id
  const rootItems = arr.filter((item) => !item[parentIds]); // 没有父级的数据(根节点)
  const childrenOfItem = new Map();
  for (const item of arr) {
    const parentId = item[parentIds];
    if (!childrenOfItem.has(parentId)) {
      //map中不存在该数据
      childrenOfItem.set(parentId, []); //存至map中并赋值为空
    }
    childrenOfItem.get(parentId).push(item); //parentId相同的存在一起
  }
  function addChildren(arr) {
    for (const item of arr) {
      // 在map中找到对应的id数据
      const childItems = childrenOfItem.get(item[id]);
      if (childItems) {
        item.children = addChildren(childItems);
      }
    }
    return arr;
  }
  return addChildren(rootItems);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值