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

142
Visualizações
Javascript: mezcle dos matrices de objetos ordenados por fecha y sin repeticiones

Tengo dos listas:

 let originalDocs = [ { id: "sara", date: new Date("01/01/2022") }, { id: "vic", date: new Date("10/26/2020") } ]; let newDocs = [ { id: "vic", date: new Date("01/02/2022") }, { id: "raul", date: new Date("05/05/2021") } ];

Necesito mezclar ambas listas, ordenando por fecha (en orden descendente) y sin repeticiones.

Para ello, he decidido:

  1. Elimine el conjunto de elementos de la matriz original que se incluyen en la nueva matriz (es decir, eliminando la intersección) sin modificar la matriz original.
  2. Mezcle la matriz resultante ordenando por fecha.

Este es mi código actual:

 function removeIntersection(originalDocs, newDocs) { return originalDocs.filter((originalDoc) => { const index = newDocs.findIndex( (newDoc) => newDoc.id === originalDoc.id ); return index === -1; }); } function mixInOrder(originalDocs, newDocs) { return [...newDocs, ...originalDocs] .sort((a, b) => b.date - a.date); } // // MAIN // let originalDocs = [ { id: "sara", date: new Date("01/01/2022") }, { id: "vic", date: new Date("10/26/2020") } ]; let newDocs = [ { id: "vic", date: new Date("01/02/2022") }, { id: "raul", date: new Date("05/05/2021") } ]; const result = mixInOrder( removeIntersection(originalDocs, newDocs), newDocs ); console.log(result);

¿Cómo puedo hacer lo mismo de una manera más óptima, es decir, sin la necesidad de fusionar (usando la sintaxis extendida) la lista antes de ordenarla o eliminar la intersección en O(1).

Quiero decir, ¿es posible simplemente insertar para evitar la copia?

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

0

Puede lograr fácilmente el resultado usando Set y reduce como:

  • Cree una nueva matriz agregando primero los documentos originalDocs y luego newDocs .
  • Use reduce para recorrer la matriz recién creada y luego filtrar los objetos.

Puede usar Set para verificar la existencia de una clave de manera eficiente

  • Después de filtrar, puede ordenarlo en consecuencia.

 let originalDocs = [ { id: 'sara', date: new Date('01/01/2022'), }, { id: 'vic', date: new Date('10/26/2020'), }, ]; let newDocs = [ { id: 'vic', date: new Date('01/02/2022'), }, { id: 'raul', date: new Date('05/05/2021'), }, ]; const set = new Set(); const result = [...originalDocs, ...newDocs].reduce((acc, curr) => { if (!set.has(curr.id)) { acc.push(curr); set.add(curr.id); } return acc; }, []) .sort((a, b) => b.date - a.date); console.log(result);

about 4 years ago · Juan Pablo Isaza Relatório

0

Aquí se explica cómo hacer esto usando un mapa JS, donde usa la id como identificador:

 let originalDocs = [ { id: "sara", date: new Date("01/01/2022") }, { id: "vic", date: new Date("10/26/2020") } ]; let newDocs = [ { id: "vic", date: new Date("01/02/2022") }, { id: "raul", date: new Date("05/05/2021") } ]; const map = new Map(originalDocs.map(el => [el.id, el])); newDocs.forEach(el => map.set(el.id, el)); const sorted = [...map.values()].sort((a, b) => a.date - b.date); console.log(sorted)

Esto anula cualquier entrada de originalDocs con una entrada de newDocs si tienen la misma id .

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