树形结构:通过某个子节点的id和pid,获取祖先节点到当前子节点的树形结构。

87 阅读1分钟
树形结构的数据:
let tree = [
        {
          id: 1,
          label: "一级 2",
          children: [
            {
              id: 3,
              pid: 1,
              label: "二级 2-1",
              children: [
                {
                  id: 4,
                  pid: 3,
                  label: "三级 3-1-1",
                },
                {
                  id: 5,
                  pid: 3,
                  label: "三级 3-1-2",
                },
              ],
            },
            {
              id: 2,
              pid: 1,
              label: "二级 2-2",
              children: [
                {
                  id: 6,
                  pid: 2,
                  label: "三级 3-2-1",
                },
                {
                  id: 7,
                  pid: 2,
                  label: "三级 3-2-2",
                },
              ],
            },
          ],
        },
      ]
方法
function parentTree(arr, id) {
  var temp = [];
  var callback = function (nowArr, id) {
    for (var i = 0; i < nowArr.length; i++) {
      var item = JSON.parse(JSON.stringify(nowArr[i])); // 深拷贝,避免修改原数组数据
      if (item.id === id) {
        if(item.children && item.children.length > 0) {
          item.children = temp // 把前一次push到temp中的数据,赋值给item.children
          temp = []; // 把temp的内容清空
        }
        temp.push(item);
        callback(arr, item.pid); // pid 父级ID
        break;
      } else {
        if (item.children) {
          callback(item.children, id); //children 子节点字段名称
        }
      }
    }
  };
  callback(arr, id);
  return temp; // 最后返回
}
parentTree(tree, 5);  

结果
// 返回的结果: 
[{"id":1,"label":"一级 2","children":[{"id":3,"pid":1,"label":"二级 2-1","children":[{"id":5,"pid":3,"label":"三级 3-1-2"}]}]}]