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

178
Vistas
Matriz de Javascript: elimine los duplicados en función de otra propiedad

¿Cuál es el método más eficiente para deduplicar una matriz compleja en función del valor de otra propiedad? He encontrado muchos ejemplos que deduplicarán una matriz o una matriz compleja, pero no este caso de uso específico.

Estoy tratando de encontrar registros con valores únicos en la columna 3 (estado) con el número más alto en la columna 2 (licencia)

 var arrayWithDuplicates = [ ["Boat", 1, "NV"], ["Car", 7, "CA"], ["Boat", 3, "NV"], ["Boat", 4, "CA"], ["Car", 5, "OR"], ["Boat", 6, "CA"], ];

Resultado deseado

 var outputArray = [ ["Car", 7, "CA"], ["Boat", 3, "NV"], ["Car", 5, "OR"] ];

Esto funciona, pero no estoy seguro si con grandes conjuntos de datos

 var arrayWithDuplicates = [ ["Boat", 1, "NV"], ["Car", 7, "CA"], ["Boat", 3, "NV"], ["Boat", 4, "CA"], ["Car", 5, "OR"], ["Boat", 6, "CA"], ]; let arr= arrayWithDuplicates; let unique = [] for (let i = 0; i < arr.length; i++) { let found = false; for (let j = 0; j < unique.length; j++) { if (arr[i][2] === unique[j][2]) { found = true; if (arr[i][1] > unique[j][1]) { unique[j] = arr[i]; } break; } } if (!found) { unique.push(arr[i]) } } console.log(unique); [["Boat", 3, "NV"], ["Boat", 7, "CA"], ["Car", 5, "OR"]]

Puede ver el rendimiento de las soluciones propuestas: https://jsbench.me/eskxxcwnhn/1

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Una forma de resolver su problema sería usar una instancia de Mapa para contener el valor más relevante. Luego reemplácelo si encuentra otro. Luego, cuando haya terminado de iterar, tome los valores que están presentes en la instancia del Mapa.

 const arrayWithDuplicates = [ ["Boat", 1, "NV"], ["Car", 7, "CA"], ["Boat", 3, "NV"], ["Boat", 4, "CA"], ["Car", 5, "OR"], ["Boat", 6, "CA"], ]; const lookup = new Map(); for (const record of arrayWithDuplicates) { const key = record[2]; if (!lookup.has(key)) { lookup.set(key, record); continue; } const other = lookup.get(key); if (record[1] > other[1]) { // Iteration order is based on insertion order. By removing the // current value first, the new value will be placed at the end. // If you don't care about the order, deletion can be omitted. lookup.delete(key); lookup.set(key, record); } } const result = Array.from(lookup.values()); console.log(result);

Tenga en cuenta que la siguiente secuencia de código puede ser una operación bastante pesada:

 lookup.delete(key); lookup.set(key, record);

Debido al hecho de que reorganiza el orden de iteración de los contenidos del Mapa. Esto solo se hace para obtener el resultado en el orden que buscas. Si el orden de los elementos resultantes es irrelevante, debe eliminar la lookup.delete(key) para mejorar la velocidad de ejecución.

Aunque el uso de instancias de mapas podría producir cierta sobrecarga de ejecución para colecciones pequeñas. La velocidad de búsqueda mejorada realmente brilla cuando las colecciones se hacen más grandes.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Uso de Ordenar y Reducir

 const arrayWithDuplicates = [ ["Boat", 1, "NV"], ["Car", 7, "CA"], ["Boat", 3, "NV"], ["Boat", 4, "CA"], ["Car", 5, "OR"], ["Boat", 6, "CA"], ]; let deduped = [...arrayWithDuplicates]; // take a copy deduped.sort((a, b) => { // sorts in place if (a[0] < b[0]) return 1; // sort on names if (a[0] > b[0]) return -1; return b[1] - a[1]; // sort on second element }) // reduce into an object keyed on state deduped = Object.values( // take only the values from the object deduped.reduce((acc, cur) => { const state = cur[2]; if (!acc[state]) acc[state] = cur; return acc; },{})) console.log(deduped)

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