var source = [
        {
          id: 1,
          pid: 0,
          name: 'body',
        },
        {
          id: 5555,
          pid: 0,
          name: 'script',
        },
        {
          id: 55551,
          pid: 5555,
          name: 'js',
        },
        {
          id: 2,
          pid: 1,
          name: 'title',
        },
        {
          id: 3,
          pid: 1,
          name: 'div',
        },
        {
          id: 4,
          pid: 3,
          name: 'span',
        },
        {
          id: 5,
          pid: 3,
          name: 'icon',
        },
        {
          id: 6,
          pid: 4,
          name: 'subspan',
        },
      ];
      function toTree(data) {
        let result = [];
        if (!Array.isArray(data)) {
          return result;
        }
        let map = {};
        data.forEach((item) => {
          map[item.id] = item;
        });
        data.forEach((item) => {
          let parent = map[item.pid];
          if (parent) {
            (parent.children || (parent.children = [])).push(item);
          } else {
            result.push(item);
          }
        });
        return result;
      }
      console.log("树结构===", toTree(source));
      let newTree = toTree(source);
      var resultArr = [];
      function flat(nodes, parentId) {
        if (!nodes || nodes.length === 0) return [];
        nodes.forEach((node) => {
            resultArr.push({ ...node });
          return flat(node.children, node.id);
        });
      }
      flat(newTree, 0);
      console.log("铺平===", resultArr)