Tengo una matriz de objetos de la forma:
{productID: '15', name: 'Pepsi', category: 'food/beverages', dateAdded: '2015-12-21T17:42:34Z'} Quiero encontrar los 5 elementos más antiguos comparando las cadenas dateAdded . Probé algunos bucles ineficientes y fallé con reduce() , pero siento que hay una manera más eficiente. ¿Cómo puedo acumular los 5 artículos más antiguos?
una ordenación/rebanada simple lo hará - el formato de la fecha significa que usted puede simplemente hacer una comparación local en su localeCompare de ordenación... `
const array = [ {productID: '15',name: 'Pepsi',category: 'food/beverages',dateAdded: '2015-12-21T17:42:34Z'}, {productID: '13',name: 'Coke',category: 'food/beverages',dateAdded: '2015-12-20T17:42:34Z'} ]; const top5 = array .sort(({dateAdded: a}, {dateAdded: b}) => a.localeCompare(b)) .slice(0, 5); console.log(top5);Puede ordenar por datetime como se muestra a continuación.
array.sort((firstEl, secondEl) => new Date(firstEl.dateAdded).getTime() - new Date(secondEl.dateAdded).getTime()) .slice(0, 5); const array = [ { productID: '0', name: 'Pepsi', category: 'food/beverages', dateAdded: '2015-12-21T17:42:34Z' }, { productID: '1', name: 'Coke', category: 'food/beverages', dateAdded: '2015-10-20T17:42:34Z' }, { productID: '2', name: 'Coke', category: 'food/beverages', dateAdded: '2015-11-20T17:42:34Z' }, { productID: '3', name: 'Coke', category: 'food/beverages', dateAdded: '2015-08-20T17:42:34Z' }, { productID: '4', name: 'Coke', category: 'food/beverages', dateAdded: '2015-01-20T17:42:34Z' }, { productID: '5', name: 'Coke', category: 'food/beverages', dateAdded: '2015-03-20T17:42:34Z' }, { productID: '6', name: 'Coke', category: 'food/beverages', dateAdded: '2016-10-20T17:42:34Z' }, { productID: '7', name: 'Coke', category: 'food/beverages', dateAdded: '2017-10-20T17:42:34Z' }, ]; const newArr = array.sort((firstEl, secondEl) => new Date(firstEl.dateAdded).getTime() - new Date(secondEl.dateAdded).getTime()).slice(0, 5); console.log(newArr);Ordene los artículos por fecha de dateAdded y luego tome los 5 primeros, que deberían ser los más antiguos