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

293
Vistas
fusionar dos árboles agregando solo nodos únicos de un árbol al siguiente

Estoy intentando fusionar Tree2 en Tree1. El resultado combinado contiene todos los nodos existentes en Tree1 con la adición de los nodos Tree2, ubicados en el nivel correcto en la jerarquía, que no existen en Tree1. Las entradas finales del árbol son más grandes y profundas, pero he tenido problemas con los árboles de ejemplo simples a continuación.

 Tree1 = {"name":"A","children":[{"name":"B","children":[{"name":"C","children":[]}]},"name":"B1","children":[{"name":"C1","children":[]}]}]} Tree2 = {"name":"A", "children":[{"name":"B", "children":[{"name":"C2", "children":[]}]}]} merged = {"name":"A","children":[{"name":"B","children":[{"name":"C","children":[]},{"name":"C2","children":[]}]},{"name":"B1","children":[{"name":"C1","children":[]}]}]}
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puede fusionarse mirando el nombre de la propiedad del mismo nivel.

Este enfoque devuelve una matriz, porque si tiene diferentes nombres para la raíz, el resultado contiene al menos dos objetos.

 const merge = (a, b) => { if (!Array.isArray(a)) a = [a]; if (!Array.isArray(b)) b = [b]; return [...a, ...b].reduce((r, o) => { const item = r.find(({ name }) => o.name === name); if (item) item.children = merge(item.children, o.children); else r.push(o); return r; }, []); }, tree1 = { name: "A", children: [{ name: "B", children: [{ name: "C", children: [] }] }, { name: "B1", children: [{ name: "C1", children: [] }] }] }, tree2 = { name: "A", children: [{ name: "B", children: [{ name: "C2", children: [] }] }] }, result = merge(tree1, tree2); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedes usar la recursividad para fusionar tus árboles:

 function merge(...trees){ var m = {}; for (var i of trees){ m[i.name] = [...(i.name in m ? m[i.name] : []), ...i.children]; } return Object.keys(m).map(function(x){return {name:x, children:m[x].length > 1 ? merge(...m[x]) : m[x]}}) }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Notamos la similitud de la lista recopilada de niños y los parámetros iniciales de nuestra función, y podemos terminar con una recursividad simple. Aquí plegamos el árbol en un objeto cuyas claves son los name y cuyos valores son los hijos recopilados. Luego llamamos Object .entries children eso y mapeamos los pares clave-valor en name y (a través de una llamada recurrente) propiedades secundarias para cada uno. Eso es todo lo que se necesita

 const mergeTrees = (...trees) => Object .entries (trees .reduce ((a, {name, children = []}) => ({ ...a, [name]: (a [name] || []) .concat (children) }), {})) .map (([k, v]) => ({name: k, children : mergeTrees (...v)})) const tree1 = {name: "A", children: [{name: "B", children: [{name: "C", children: []}]}, {name: "B1", children: [{name: "C1", children: []}]}]} const tree2 = {name: "A", children: [{name: "B", children: [{name: "C2", children: []}]}]} console .log (mergeTrees (tree1, tree2))
 .as-console-wrapper {max-height: 100% !important; top: 0}

Tenga en cuenta que devolvemos un bosque, no un árbol. Si sabe que todos los árboles tendrán la misma raíz, puede extraer el primer elemento del resultado.

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