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

214
Visualizações
Fusionando dos arreglos sin duplicados

He estado atascado en este problema durante unos días.

 let data1 = [{ project_code: "110", project_text: "SampleProject1", location: "Seattle", startingCost: 0, actualCost: 399.99 }, { project: "110", project_text: "SampleProject1", location: "Bellevue", startingCost: 0, actualCost: 599.99 }]; let data2 = [{ project: "110", project_text: "SampleProject1", location: "Seattle", startingCost: 249.99, actualCost: "" }, { project: "110", project_text: "SampleProject1", location: "Bellevue", startingCost: 699.99, actualCost: "" }, { project: "110", project_text: "SampleProject1", location: "North Gate", startingCost: 899.99, actualCost: 1199.99 }]

El objetivo final aquí es que quiero que se fusione en una matriz y los valores se actualicen así:

 let output = [{ project: "110", project_text: "SampleProject1", location: "Seattle", startingCost: 249.99, // FROM DATA2 actualCost: 399.99 // FROM DATA1 }, { project: "110", project_text: "SampleProject1", location: "Bellevue", startingCost: 699.99, // FROM DATA2 actualCost: 599.99 // FROM DATA1 }, { // THIS ONE IS ADDING IN NEW DATA project: "110", project_text: "SampleProject1", location: "North Gate", startingCost: 899.99, actualCost: 1199.99 },

]

Preferiría mucho más un enfoque Vanilla JS, pero estaré bien con Lodash siempre que acerque el resultado a eso.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

 let data1 = [{project_code: "110",project_text: "SampleProject1",location: "Seattle",startingCost: 0,actualCost: 399.99},{project: "110",project_text: "SampleProject1",location: "Bellevue",startingCost: 0,actualCost: 599.99}]; let data2 = [{project: "110",project_text: "SampleProject1",location: "Seattle",startingCost: 249.99,actualCost: ""},{project: "110",project_text: "SampleProject1",location: "Bellevue",startingCost: 699.99,actualCost: ""},{project: "110",project_text: "SampleProject1",location: "North Gate",startingCost: 899.99,actualCost: 1199.99}] data2.forEach((obj) => { let ob = data1.find((e) => e.location == obj.location); // YOU CAN ADD OTHER CONDTIONS HERE WITH && OPERATOR if (ob !== undefined) { obj.actualCost = ob.actualCost; } }); console.log(data2);

El código anterior anulará data2.

 let data1 = [{project_code: "110",project_text: "SampleProject1",location: "Seattle",startingCost: 0,actualCost: 399.99},{project: "110",project_text: "SampleProject1",location: "Bellevue",startingCost: 0,actualCost: 599.99}]; let data2 = [{project: "110",project_text: "SampleProject1",location: "Seattle",startingCost: 249.99,actualCost: ""},{project: "110",project_text: "SampleProject1",location: "Bellevue",startingCost: 699.99,actualCost: ""},{project: "110",project_text: "SampleProject1",location: "North Gate",startingCost: 899.99,actualCost: 1199.99}] var final_result = []; data2.forEach(({...obj}) => { let ob = {...data1.find((e) => e.location == obj.location)}; //{...data}; used to Clone Object without reference to do not override data1 if (Object.keys(ob).length !== 0) { ob.startingCost = obj.startingCost; final_result.push(ob); } else { final_result.push(obj); } }); console.log(final_result);

  1. {...obj} en forleach ( forEach(({...obj}) ) utilizado para restringir la modificación del objeto data2 al modificar final_result
about 4 years ago · Juan Pablo Isaza Relatório

0

Así es como lo haría. Como sugirieron los comentarios, ¿qué propiedad se supone que es única? Sería el criterio que usaría para encontrar los datos en la otra matriz, usé la ubicación porque eso es lo único que parecía ser diferente. Por supuesto, puede usar más de una propiedad para encontrar una coincidencia como: item.project === obj.project && item.location === obj.location

 data2.forEach(obj=>{ let object1 = data1.find(item=>item.location === obj.location); if(object1){ object1.startingCost = object1.startingCost || obj.startingCost; object1.actualCost = object1.actualCost || obj.actualCost; } else{ data1.push(obj); }

})

Esto sería predeterminado para mantener los datos de la matriz data1 si ambas matrices tienen datos para un objeto. Así que cámbielo por las necesidades de su programa.

about 4 years ago · Juan Pablo Isaza Relatório

0

Intente usar Array.reduce .

Lógica

  • data2 con Array.reduce .
  • Verifique el nodo coincidente en data1 desde data2 .
  • Si se encuentra un nodo coincidente, combine el costo startingCost y el actualCost .
  • Aunque esto cubre el requisito, no se detenga aquí. Debe verificar que cada nodo en data1 ya se haya cubierto en el resultado. Si eso no está cubierto, empuje el nodo que falta para que resulte.
     const data1 = [{ project: "110", project_text: "SampleProject1", location: "Seattle", startingCost: 0, actualCost: 399.99 }, { project: "110", project_text: "SampleProject1", location: "Bellevue", startingCost: 0, actualCost: 599.99 }]; const data2 = [{ project: "110", project_text: "SampleProject1", location: "Seattle", startingCost: 249.99, actualCost: "" }, { project: "110", project_text: "SampleProject1", location: "Bellevue", startingCost: 699.99, actualCost: "" }, { project: "110", project_text: "SampleProject1", location: "North Gate", startingCost: 899.99, actualCost: 1199.99 }]; const result = data2.reduce((acc, curr) => { const matchingNode = data1.find((node) => node.project === curr.project && node.project_text === curr.project_text && node.location === curr.location); if(matchingNode) { const updatedNode = { ...matchingNode }; // Take a copy of matching node updatedNode.startingCost = matchingNode.startingCost || curr.startingCost; updatedNode.actualCost = matchingNode.actualCost || curr.actualCost; acc.push(updatedNode); } else { acc.push(curr); } return acc; }, []); // Since we have looped through data2 to generate the array, // we have to ensure that we have not missed any node from data1 aswell data1.forEach((node) => { const matchingNode = result.find((resultNode) => node.project === resultNode.project && node.project_text === resultNode.project_text && node.location === resultNode.location); if (!matchingNode) { result.push(node); } }) console.log(result);
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