数组转Tree

42 阅读1分钟
const arr = [
  { id: 1, name: "name1", parentId: 0 },
  { id: 2, name: "name2", parentId: 1 },
  { id: 3, name: "name3", parentId: 1 },
  { id: 4, name: "name4", parentId: 3 },
  { id: 5, name: "name5", parentId: 4 },
];

const getTree = (arr) => {
  const result = [];
  const itemMap = {};
  for (const item of arr) {
    const { id, parentId } = item;
    if (!itemMap[id]) {
      itemMap[id] = { children: [] };
    }
    itemMap[id] = { ...item, children: itemMap[id]["children"] };
    const treeItem = itemMap[id];
    if (parentId === 0) {
      result.push(treeItem);
    } else {
      if (!itemMap[parentId]) {
        itemMap[parentId] = { children: [] };
      }
      itemMap[parentId].children.push(treeItem);
    }
  }
  return result;
};