简单的数组转树实现

90 阅读1分钟
const arr = [  { id: 1, parent: null, name: "根节点1" },  { id: 2, parent: 1, name: "子节点1" },  { id: 3, parent: 1, name: "子节点2" },  { id: 4, parent: 2, name: "孙节点1" },  { id: 5, parent: 2, name: "孙节点2" },];

function arrayToTree(arr) {
  // 创建一个Map对象,用于存储数组中的每个元素,键为元素的id,值为元素本身
  const map = new Map();
  for (const item of arr) {
    map.set(item.id, item);
  }

  // 创建一个数组,用于存储所有根节点(即没有父节点的节点)
  const roots = [];
  for (const item of arr) {
    // 如果当前元素的parent属性为null,则表示它是根节点
    if (item.parent === null) {
      roots.push(item);
    } else {
      // 否则,找到当前元素的父节点
      const parent = map.get(item.parent);
      // 如果父节点还没有children属性,则初始化一个空数组
      if (!parent.children) {
        parent.children = [];
      }
      // 将当前元素添加到父节点的children数组中
      parent.children.push(item);
    }
  }
  // 返回根节点数组
  return roots;
}

console.log(arrayToTree(arr));