树形结构数据处理

207 阅读1分钟

级联选择器数据处理

由于后台返回的树形数据最后的叶子节点默认children是空数组,elementUI的级联选择框要求叶子节点是null,所以用这个函数处理下数据从而达到组件需求

// 递归处理tree接口,children设置为null
function manageTree(data, setNullFun) {
  data.forEach((item) => {
    if (item.children && item.children.length) {
      manageTree(item.children, setNullFun);
    } else {
      item.children = null;
      if (setNullFun) {
        setNullFun(item);
      }
    }
  });
  return data;
}

查找递归内父节点数据

/**
 * 
 * @param {元数据} tree 
 * @param {目标的id} targetId 
 * @param {返回的命中路径} currentPath 
 * @param {原数据中匹配targetId的字段} targetIdField 
 * @returns 
 */
export function findNodeAndParents(tree, targetId, currentPath = []) {
  for (let i = 0; i < tree.length; i++) {
    const node = tree[i];
    if (node.id === targetId) {
      return [...currentPath, node];
    }

    if (node.children && node.children.length > 0) {
      const foundPath = findNodeAndParents(node.children, targetId, [
        ...currentPath,
        node,
      ]);
      if (foundPath) {
        return foundPath;
      }
    }
  }

  return null;
}