Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

296
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda