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];
-
a.map
obtiene las fechas de la matriz de objetos. -
new Date
se aplica a cada fecha, lo que hace que los objetos de fecha -
Math.max.apply
encuentra el más reciente - Hemos encontrado la fecha más reciente, ahora necesitamos el objeto.
-
a.filter
recorre el originala
formación. - 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. - 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.