Tengo contactos que tienen mensajes SMS asociados a ellos. Cada registro de sms tiene propiedades como el time . El tiempo es una cadena de marca de tiempo con el formato de este ejemplo
2022-04-29T16:10:43-06:00Estoy tratando de ordenar esta matriz de mensajes sms para que el último sea el último y el más antiguo sea el primero en la matriz. Pensé que lo tenía clavado, pero aparentemente no es así. Todavía no se clasifica perfectamente en absoluto.
this.getRecent() .then(contacts => { const sorted = contacts.map(contact => { contact.sms = contact.sms.sort((a,b) => (a.time.localeCompare(b.time)); return contact; }); // rest of code here }) .catch(err => this.handleError(err));Según su pregunta, asumo que el objeto contact.sms contiene una matriz de objetos donde el time es una cadena (se llama localeCompare). Dado que las fechas pueden tener operadores aplicados, puede ordenarlas como cualquier número.
const dates = [ new Date("2022-04-29T16:10:43-06:00"), new Date("2023-04-29T16:10:43-06:00"), new Date("2022-01-29T16:10:43-06:00") ] console.log(dates) dates.sort((a, b) => a - b) console.log(dates)En tu caso,
// Sorts dates where the least recent is first. contact.sms = contact.sms.sort((a,b) => new Date(a.time) - new Date(b.time));Puede analizarlos a una Date y comparar los milisegundos:
contact.sms.sort((a,b) => new Date(a.time) - new Date(b.time)); O intercambie a b desea invertir el orden.