Documentación del método recursivo del árbol de estructura

Documentación del método recursivo del árbol de estructura

En nuestro trabajo, a menudo nos encontramos con la necesidad de árboles de estructura, y el procesamiento de los árboles de estructura será más problemático, especialmente cuando la estructura devuelta por el backend no es la estructura que queremos. Mi escenario es que el backend devuelve una estructura unidimensional objeto de matriz. Necesito usar una identificación principal asociada para procesar el formato de datos del árbol de estructura. El nivel es incierto. En este momento, necesitamos usar el método recursivo. El método de recursividad de una matriz unidimensional en la estructura El formato de árbol se registra a continuación, usando GPT Dale a la nota, jaja

init(list, permisId) {
    
    
  // 根据permisId筛选出所有父级pPermisId等于该permisId的项
  const _list = this.originallist.filter(item => item.pPermisId === permisId);
  // 如果筛选结果列表不为空,说明有子节点
  return _list.length > 0
    // 则遍历筛选结果列表中的每一项,为每个子节点添加children属性,并递归调用自身生成子节点的树形结构
    ? _list.map(item => ({
    
     ...item, children: this.init(list, item.permisId) }))
    // 如果没有子节点,返回一个空数组
    : [];
},

Al llamar, el valor se pasa por primera vez y la identificación de la asociación debe pasarse como indefinida, porque la primera capa no tiene un nodo principal, primero debemos encontrar la primera capa.

this.init(list, undefined)

Solo necesitamos pasar nuestra matriz unidimensional, que son los datos originales, para obtener la estructura del árbol de estructura.

Marca recursivamente el nodo de la hoja inferior

En nuestra operación específica, de hecho, solo necesitamos operar la estructura de la hoja inferior, porque si se verifica la hoja inferior, también se verificará el nodo padre.. Lo siguiente registra un árbol de estructura recursiva, marcando el método de nodos de hoja

flattenTree(tree, result = []) {
    
    
  // 如果传入的tree参数不存在,则直接返回结果数组result
  if (!tree) return result;
  // 遍历树结构中的每个节点,将其permisId和是否为叶子节点的状态({ permisId, leaf })添加到结果数组中
  result.push(...tree.map(node => ({
    
     permisId: node.permisId, leaf: !node.children.length })));
  // 遍历树结构中每个节点的children属性,并递归调用本函数,将结果合并进结果数组result中
  tree.forEach(node => this.flattenTree(node.children, result));
  // 返回最终结果数组
  return result;
},

Saque todos los nodos de la hoja inferior del árbol de estructura

deepList(data) {
    
    
  // 遍历data数组中的每一项
  data.map(item => {
    
    
    // 如果当前项存在children属性并且该属性有子元素,则递归调用自身深度遍历该子树
    if (item.children && item.children.length > 0) {
    
    
      this.deepList(item.children);
    } else {
    
    
      // 否则,将当前项的permisId加入curkeys数组
      this.curkeys.push(item.permisId);
    }
  });
},

Supongo que te gusta

Origin blog.csdn.net/m0_52313178/article/details/130600503
Recomendado
Clasificación