Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

163
Vistas
Cree una jerarquía a partir de una matriz plana con ID de niños

Tengo una matriz plana donde cada nodo tiene una identificación y una matriz de las identificaciones de sus hijos:

 [ {id: 1, children: [2, 3]}, {id: 2, children: []}, {id: 3, children: [4]}, {id: 4, children: []}, {id: 5, children: []}, ]

¿Cómo puedo, preferiblemente en Javascript, crear una jerarquía con los objetos reales como niños anidados en lugar de solo sus ID?

 [ {id: 1, children: [ {id: 2, children: []}, {id: 3, children: [ {id: 4, children: []} ]} ]}, {id: 5, children: []}, ]

He intentado lo siguiente pero solo funciona la primera capa:

 function getHierarchyFromFlatArray(nodes) { const nodeById = new Map(nodes.map(el => [el.id, el])) for (const node of nodes) { node.children = node.children.map(id => { let val = nodeById.get(id) let idx = nodes.findIndex(item => item.id=== id) nodes.splice(idx, 1) return val }) } return nodes }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Aquí hay una manera de resolver el problema. Primero cree un Map que haga referencia a los valores de id al valor del node . Luego procese cada uno de los nodos (reemplazando la lista de hijos con un árbol recursivamente, al mismo tiempo eliminando esos nodos del Mapa) en la lista si su valor de id está presente en el Mapa.

 const nodes = [ {id: 1, children: [2, 3]}, {id: 2, children: []}, {id: 3, children: [4]}, {id: 4, children: []}, {id: 5, children: []}, ] const nodemap = new Map(nodes.map(n => [n.id, n])); const tree = (node) => { nodemap.delete(node.id); return node.children.length ? { id : node.id, children : node.children.map(c => tree(nodemap.get(c))) } : node } result = [] nodes.forEach(node => { if (nodemap.has(node.id)) result.push(tree(node)) }) console.log(result)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Pasos:

  • Cree una asignación de cada nodo a su padre ( undefined para los nodos raíz).
  • Borre la matriz de niños y comience a adjuntar cada nodo a la matriz de niños de su padre.
  • Finalmente, devuelva los nodos que tienen la clave principal como undefined en nuestro mapeo.

 const getHierarchyFromFlatArray = (nodes) => { const nodeById = {} const parent = {} nodes.forEach((node) => { nodeById[node.id] = node node.children.forEach((child) => { parent[child] = node.id }) node.children = [] }) nodes.forEach((node) => { const parentId = parent[node.id] // ? If current node is the child of some other node if (parentId && nodeById[parentId]) { nodeById[parentId].children.push(node) } }) return nodes.filter((node) => parent[node.id] === undefined) } const input = [ {id: 1, children: [2, 3]}, {id: 2, children: []}, {id: 3, children: [4]}, {id: 4, children: []}, {id: 5, children: []}, ] const output = getHierarchyFromFlatArray(input) console.log(output) /* output = [ {id: 1, children: [ {id: 2, children: []}, {id: 3, children: [ {id: 4, children: []} ]} ]}, {id: 5, children: []}, ] */

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda