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

76
Views
Tome valores únicos y nuevos de la matriz con datos duplicados

Hola chicos tengo este escenario:

 const data = [ { "name": "Hebert", "timestamp": 1640371815, // 15:50:15 },{ "name": "Brien", "timestamp": 1640373855, // 16:24:15 },{ "name": "Hebert", "timestamp": 1640363601 // 13:33:21 },{ "name": "Mary", "timestamp": 1640356701 // 11:38:21 },{ "name": "Mary", "timestamp": 1640356521 // 11:35:21 },{ "name": "Mary", "timestamp": 1640356401 // 11:33:21 } ];

Necesito que me duren uno de los duplicados por marca de tiempo:

 // expected result [ { "name": "Hebert", "timestamp": 1640371815 // 15:50:15 newest one },{ "name": "Brien", "timestamp": 1640373855 // 16:24:15 unique },{ "name": "Mary", "timestamp": 1640356701 // 11:38:21 newest } ];

Intento esto:

 data.sort((a,b) => a.name.localeCompare(b.name)) .filter((chat, index, self) => self.findIndex( c => c.name == chat.name ) == index )

salida duplicada eliminada pero sin considerar la marca de tiempo más reciente entre cada duplicado

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

En lugar de ordenar y usar el filtro, puede iterar la matriz solo una vez almacenando elementos en un Mapa u objeto usando los nombres como claves y luego simplemente actualizar la marca de tiempo más baja a medida que recorre cada elemento.

Luego, finalmente, convierta los valores del objeto nuevamente a la matriz

 const items = new Map() data.forEach(({name,timestamp}) => { const o = items.get(name); if(o){ timestamp < o.timestamp && o.timestamp = timestamp; } else { items.set(name, {name, timestamp}); } }); const res = [...items.values()] console.log(res)
 <script> const data = [ { "name": "Hebert", "timestamp": 1640371815, // 15:50:15 },{ "name": "Brien", "timestamp": 1640373855, // 16:24:15 },{ "name": "Hebert", "timestamp": 1640363601 // 13:33:21 },{ "name": "Mary", "timestamp": 1640356701 // 11:38:21 },{ "name": "Mary", "timestamp": 1640356521 // 11:35:21 },{ "name": "Mary", "timestamp": 1640356401 // 11:33:21 } ]; </script>

about 4 years ago · Santiago Trujillo Report

0

 const data = [ { "name": "Hebert", "timestamp": 1640371815, // 15:50:15 },{ "name": "Brien", "timestamp": 1640373855, // 16:24:15 },{ "name": "Hebert", "timestamp": 1640363601 // 13:33:21 },{ "name": "Mary", "timestamp": 1640356701 // 11:38:21 },{ "name": "Mary", "timestamp": 1640356521 // 11:35:21 },{ "name": "Mary", "timestamp": 1640356401 // 11:33:21 } ]; const seen = {}; const dataModified = []; data.forEach((elem) => { const index = seen[elem.name]; if(index == undefined){ dataModified.push(elem); seen[elem.name] = dataModified.length - 1; } else if(dataModified[index].timestamp < elem.timestamp){ dataModified.splice(index, 1, elem); } }); console.log(dataModified);

about 4 years ago · Santiago Trujillo Report

0

data.sort((a,b) => a.name.localeCompare(b.name)) .filter((chat, index, self) => self.findIndex(c => c.name === chat.name && c.timestamp > chat.timestamp)<0)

La idea es que findIndex solo devuelva el índice cuando exista otro duplicado con una marca de tiempo mayor, de lo contrario devolvería -1.

about 4 years ago · Santiago Trujillo 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!