Saltar al contenido

¿Cuál es la forma elegante de obtener la última fecha de la matriz de objetos en el lado del cliente?

Solución:

Una forma limpia de hacerlo sería convertir cada fecha en una Date() y toma el máximo

ES6:

new Date(Math.max(...a.map(e => new Date(e.MeasureDate))));

JS:

new Date(Math.max.apply(null, a.map(function(e) {
  return new Date(e.MeasureDate);
})));

dónde a es la matriz de objetos.

Lo que hace es asignar cada uno de los objetos de la matriz a una fecha creada con el valor de MeasureDate. Esta matriz mapeada se aplica luego a la Math.max función para obtener la última fecha y el resultado se convierte en una fecha.

Al mapear las fechas de la cadena a los objetos JS Date, ¿termina usando una solución como Min / Max de fechas en una matriz?

Una solución menos limpia sería simplemente asignar los objetos al valor de MeasureDate y ordenar la matriz de cadenas. Esto solo funciona debido al formato de fecha particular que está utilizando.

a.map(function(e) { return e.MeasureDate; }).sort().reverse()[0]

Si el rendimiento es un problema, es posible que desee reduce la matriz para obtener el máximo en lugar de usar sort y reverse.

Además de la respuesta de @Travis Heeter, esto devuelve el objeto que contiene la última fecha:

array.reduce((a, b) => (a.MeasureDate > b.MeasureDate ? a : b));

Una solución más robusta tal vez podría ser convertir las cadenas en Date objetos cada vez. Podría ser notablemente más lento si se trata de matrices (muy) grandes:

array.reduce((a, b) => {
  return new Date(a.MeasureDate) > new Date(b.MeasureDate) ? a : b;
})

Si desea obtener el Objeto completo, no solo la fecha …

Si la matriz de objetos de OP se asignó a a así es como obtienes el Objeto con la fecha más reciente:

var mostRecentDate = new Date(Math.max.apply(null, a.map( e => {
   return new Date(e.MeasureDate);
})));
var mostRecentObject = a.filter( e => { 
    var d = new Date( e.MeasureDate ); 
    return d.getTime() == mostRecentDate.getTime();
})[0];
  1. a.map obtiene las fechas de la matriz de objetos.
  2. new Date se aplica a cada fecha, lo que hace que los objetos de fecha
  3. Math.max.apply encuentra el más reciente
  4. Hemos encontrado la fecha más reciente, ahora necesitamos el objeto.
  5. a.filter recorre el original a formación.
  6. Necesitamos alguna forma de comparar fechas, así que usamos .getTime(), que devuelve el número de milisegundos desde el 01/01/1970. Esto tendrá en cuenta el tiempo, si está definido, así como la fecha.
  7. Cuando se encuentra la fecha correcta, true se devuelve, y .filter nos da ese objeto.

Nota: Esta solución es una extensión de la respuesta de @ archyqwerty anterior. Su solución proporcionó solo la fecha más reciente de una matriz de objetos, esta solución le brinda el Objeto completo del que la fecha era miembro.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *