Digamos que tenemos una matriz de objetos como:
[ { id: 1, time: "2021-05-02 10:12:45.123" }, { id: 1, time: "2021-05-02 11:12:45.123" }, { id: 1, time: "2021-05-02 12:12:45.123" }, { id: 2, time: "2021-05-02 05:12:45.123" }, { id: 1, time: "2021-05-01 12:12:45.123" }, { id: 2, time: "2021-05-01 05:12:45.123" }, { id: 2, time: "2021-05-01 04:12:45.123" }, { id: 3, time: "2021-05-01 10:12:45.123" }, ]Entonces, mi propósito es reducir la matriz en javascript para que el resultado sea -> para cada Id para cada día para tener la última hora como:
[ { id: 1, time: "2021-05-02 12:12:45.123" }, { id: 2, time: "2021-05-02 05:12:45.123" }, { id: 1, time: "2021-05-01 12:12:45.123" }, { id: 2, time: "2021-05-01 05:12:45.123" }, { id: 3, time: "2021-05-01 10:12:45.123" }, ]Por favor, ¿puedes ayudar con esto? Gracias por adelantado
Puede lograr fácilmente el resultado usando reduce
const arr = [ { id: 1, time: "2021-05-02 10:12:45.123" }, { id: 1, time: "2021-05-02 11:12:45.123" }, { id: 1, time: "2021-05-02 12:12:45.123" }, { id: 2, time: "2021-05-02 05:12:45.123" }, { id: 1, time: "2021-05-01 12:12:45.123" }, { id: 2, time: "2021-05-01 05:12:45.123" }, { id: 2, time: "2021-05-01 04:12:45.123" }, { id: 3, time: "2021-05-01 10:12:45.123" }, ]; const result = arr.reduce((acc, curr) => { if (acc.length && acc[acc.length - 1].id === curr.id) { if (new Date(acc[acc.length - 1].time) < new Date(curr.time)) { acc[acc.length - 1] = { ...acc[acc.length - 1], ...curr }; } } else acc.push(curr); return acc; }, []); console.log(result);