Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

295
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!