扁平化的数组转为树状数组

之前也有些过树状数据转为扁平化的数组,这就不多阐述了,又想了解的可以翻下我之前的文章。这个是我去年的面试题,当时也没写出来,一是菜,二是也紧张。

let arr = [
  { name: 1, parentId: null, id: 1 },
  { name: 2, parentId: null, id: 2 },
  { name: 3, parentId: 1, id: 3 },
  { name: 4, parentId: 3, id: 4 },
  { name: 5, parentId: null, id: 5 },
  { name: 6, parentId: 5, id: 6 },
  { name: 7, parentId: 5, id: 7 },
];
function flatToTree(data) {
  var res = [];
  // 创建 map集合
  var map = new Map(data.map(item => [item.id, item]));
  data.forEach(item => {
    var parentItem = map.get(item.parentId);
    if (parentItem) {
      (parentItem.children ??= []).push(item);
    } else {
      res.push(item);
    }
  });
  return res;
}
console.log(flatToTree(arr));
// [
//   {
//       "name": 1,
//       "parentId": null,
//       "id": 1,
//       "children": [
//           {
//               "name": 3,
//               "parentId": 1,
//               "id": 3,
//               "children": [
//                   {
//                       "name": 4,
//                       "parentId": 3,
//                       "id": 4
//                   }
//               ]
//           }
//       ]
//   },
//   {
//       "name": 2,
//       "parentId": null,
//       "id": 2
//   },
//   {
//       "name": 5,
//       "parentId": null,
//       "id": 5,
//       "children": [
//           {
//               "name": 6,
//               "parentId": 5,
//               "id": 6
//           },
//           {
//               "name": 7,
//               "parentId": 5,
//               "id": 7
//           }
//       ]
//   }
// ]
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值