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

164
Views
Javascript: elimina los elementos más antiguos de un mapa (objeto)

tengo un objeto:

 let lastPosts = { id1: { date: new Date("10/10/2000 11:30:34"), }, id2: { date: new Date("10/10/2000 10:00:00"), }, id3: { date: new Date("10/10/2000 10:01:30"), }, id4: { date: new Date("11/10/2000 13:09:30"), }, id5: { date: new Date("8/10/2005 18:10:15"), }, id6: { date: new Date("11/10/2000 10:00:11"), }, id7: { date: new Date("10/10/2000 10:00:01"), }, id8: { date: new Date("15/10/2000 11:30:34"), }, id9: { date: new Date("7/10/2002 11:30:34"), }, id10: { date: new Date("8/10/2005 18:10:14"), }, id11: { date: new Date("11/10/2000 10:00:00"), }, };

y necesito asegurarme de que "lastPosts" solo contenga 9 publicaciones (elementos), eliminando las publicaciones más antiguas restantes.

 function deleteOldestLastPosts(lastPosts) { if (Object.keys(lastPosts).length > 9) { // What can I do here? } }

Entonces, que tengo el siguiente resultado:

 { id1: { date: new Date("10/10/2000 11:30:34"), }, id3: { date: new Date("10/10/2000 10:01:30"), }, id4: { date: new Date("11/10/2000 13:09:30"), }, id5: { date: new Date("8/10/2005 18:10:15"), }, id6: { date: new Date("11/10/2000 10:00:11"), }, id8: { date: new Date("15/10/2000 11:30:34"), }, id9: { date: new Date("7/10/2002 11:30:34"), }, id10: { date: new Date("8/10/2005 18:10:14"), }, id11: { date: new Date("11/10/2000 10:00:00"), }, }

¿Algunas ideas?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Utilice una cola de prioridad. Javascript no tiene uno incorporado, pero puede encontrar un paquete que lo proporcione o escribir uno desde cero.

Use una cola de prioridad mínima para almacenar los objetos id_n , usando el campo de date como criterio. Tan pronto como el tamaño de la cola sea > 9, elimine el elemento en la parte superior de la cola de prioridad. Luego, tome el id_n de ese elemento eliminado y elimínelo del objeto actual ( lastPosts ).

Al final, tendrá los últimos 9 elementos en la cola de prioridad. Y su objeto ( lastPosts ) tendrá los últimos 9 objetos id_n .

La complejidad del tiempo será O(n log k) , n es el tamaño de lastPosts yk es 9 .

about 4 years ago · Juan Pablo Isaza Report

0

Ordenar todos los valores por fecha. Elimine los 9 elementos más nuevos de esta matriz ordenada, produciendo una matriz de las fechas para eliminar. Luego recorra las propiedades, eliminándolo si está en la matriz.

 function deleteOldestLastPosts(lastPosts) { let values = Object.values(lastPosts); if (values.length > 9) { let datesToDelete = values.map(el => el.date).sort((a, b) => a - b); datesToDelete.splice(-9); Object.entries(lastPosts).forEach(([key, { date }]) => { if (datesToDelete.includes(date)) { delete lastPosts[key]; } }); } } let lastPosts = { id1: { date: new Date("10/10/2000 11:30:34"), }, id2: { date: new Date("10/10/2000 10:00:00"), }, id3: { date: new Date("10/10/2000 10:01:30"), }, id4: { date: new Date("11/10/2000 13:09:30"), }, id5: { date: new Date("8/10/2005 18:10:15"), }, id6: { date: new Date("11/10/2000 10:00:11"), }, id7: { date: new Date("10/10/2000 10:00:01"), }, id8: { date: new Date("15/10/2000 11:30:34"), }, id9: { date: new Date("7/10/2002 11:30:34"), }, id10: { date: new Date("8/10/2005 18:10:14"), }, id11: { date: new Date("11/10/2000 10:00:00"), }, }; deleteOldestLastPosts(lastPosts); console.log(lastPosts);

about 4 years ago · Juan Pablo Isaza Report

0

Aquí hay una función getlastPosts que:

  • ordenar el objeto json por fecha descendente
  • devuelve los primeros n elementos del objeto json usando el filter por el índice de entradas

La función usa sort , filter y reduce en la matriz Object.entries() del objeto JSON.

 let lastPosts = { id1: { date: new Date("10/10/2000 11:30:34"), }, id2: { date: new Date("10/10/2000 10:00:00"), }, id3: { date: new Date("10/10/2000 10:01:30"), }, id4: { date: new Date("11/10/2000 13:09:30"), }, id5: { date: new Date("8/10/2005 18:10:15"), }, id6: { date: new Date("11/10/2000 10:00:11"), }, id7: { date: new Date("10/10/2000 10:00:01"), }, id8: { date: new Date("15/10/2000 11:30:34"), }, id9: { date: new Date("7/10/2002 11:30:34"), }, id10: { date: new Date("8/10/2005 18:10:14"), }, id11: { date: new Date("11/10/2000 10:00:00"), }, }; function getlastPosts(posts, n) { return Object.entries(posts) .sort(([, a], [, b]) => b.date - a.date) .filter((e, i) => i < n) .reduce((r, [k, v]) => ({ ...r, [k]: v }), {}) } // get first 3 elements console.log(getlastPosts(lastPosts, 3));

Véase también Ordenar propiedad de objeto por valores

about 4 years ago · Juan Pablo Isaza 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!