使用js实现树形数据和列表数据互转

413 阅读1分钟
实现tree转为list
const treeToList = (tree, pId, res = [], level = 0) => {
    tree.forEach(x => {
      let { children, ...obj} = x;
      obj.pId = pId || '';
      obj.level = level;
      res.push(obj)
      // 使用level+1防止出现level层级超出预想的情况
      if (children && children.length) treeToList(children, obj.id, res, level + 1); 
    })
    return res;
}
实现list转为tree数据
const listToTree = (list) => {
    const tree = [];
    list.forEach(x => {
      if (!x.pId) {
        let obj = { ...x };
        obj.children = getChildren(obj.id, list);
        tree.push(obj)
      }
    })

    function getChildren(pId, list) {
      const children = list.filter(x => x.pId === pId);
      children.map(x => {
        x.children = getChildren(x.id, list)
      })
      return children;
    }
    return tree;
}