Bootstrap

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

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

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
//           }
//       ]
//   }
// ]
;