树状数据多层级问题~

新手上路,请多包涵

如下:
现在知道第五级 id: 1-12333, 如何查到 前面四级的id 并返回?? 不想forEach 五层 因为数据不确定 可能有六层 七层~

let data = [
    {
        id: 1,
        name: '1',
        child: [
            {
                id: '1-1',
                name: '11',
                child: [
                    {
                        id: '1-12',
                        name: '222',
                        child: [
                            {
                                id: '1-122',
                                name: '2223',
                                child: [
                                    {
                                        id: '1-12333',
                                        name: '222222',
                                        child: []
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
];
阅读 1.4k
2 个回答

const collect = (treeData, id) => {
  const path = [];
  const dummyRoot = {
    id: "",
    child: treeData
  };

  const helper = (root, path) => {
    if (!root) return false;

    if (root.id === id) {
      return true;
    }

    path.push(root);
    for (let i = 0; i < root.child.length; ++i) {
      if (helper(root.child[i], path)) return true;
    }

    path.pop();
  };

  helper(dummyRoot, path);
  path.shift();

  return path;
};

console.log(collect(data, "1-12333"));
console.log(collect(data, "3"));

如果说这种查操作比较少的话,就暴力一点吧,循环,最坏的情况就是这个id总在最后一个元素。

如果说,这个操作还比较多的话,我建立对数据源进行处理,也就是data,拿到数据先处理好,然后把数据平铺在那里:

const data = {
    '1-12': {
        id: '1-12',
        name: '222',
        idpath: ['自己ID', '父级ID', '父父级ID', '...']
    },
    '1-13': {
        id: '1-13',
        name: '3333',
        idpath: ['自己ID', '父级ID', '父父级ID', '...']
    },
}

这样速度就快啦。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题