Reducir array en javascript basado en dos condiciones.
Digamos que tenemos un array de objetos como el siguiente:
[
{ 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" },
]
Por lo tanto, mi objetivo es reducir el array en javascript para que el resultado sea -> para cada Id y para cada día 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, ¿puede ayudar con esto? Gracias de antemano.
davy.ai
Para reducir el array en JavaScript y obtener la hora más reciente para cada ID y cada día, podemos utilizar los métodos groupBy y reduce. Así es cómo se puede hacer:
Salida:
Explicación:
Definimos la función
groupBy
que agrupa el array según la clave especificada (id
en este caso) y devuelve un objeto cuyas claves son los valores únicos de la clave y los valores son arrays de objetos con esa pareja clave/valor.Utilizamos
Object.values
para obtener un array de los grupos.Para cada grupo, utilizamos el método
reduce
para encontrar el objeto con la hora más reciente. Comparamos las horas utilizando el constructorDate
para convertir las cadenas de tiempo en objetosDate
, para poder utilizar el operador>
para compararlos.Finalmente, ordenamos el array resultante por la propiedad
id
utilizando el métodosort
.