Tengo la siguiente respuesta de un servicio:
const arrDate = [ { "id":1, "birthDate":"2022-06-30T14:38:28.003" }, { "id":2, "birthDate":"2022-06-30T14:36:48.50" }, { "id":3, "birthDate":"2022-06-30T14:35:40.57" }, { "id":4, "birthDate":"2022-06-30T13:09:58.451" }, { "id":5, "birthDate":"2022-06-30T14:11:27.647" }, { "id":6, "birthDate":"2022-06-30T14:55:41.41" }, { "id":7, "birthDate":"2022-02-22T11:55:33.456" } ]Para ordenarlo por fecha hago lo siguiente:
const sortDate = arrDate.sort(function(a, b) { return new Date(a.birthDate) > new Date(b.birthDate); });Pero el valor de "sortDate" no es correcto:
[ { "birthDate":"2022-06-30T14:38:28.003", "id":1 }, { "birthDate":"2022-06-30T14:36:48.50", "id":2 }, { "birthDate":"2022-06-30T14:35:40.57", "id":3 }, { "birthDate":"2022-06-30T13:09:58.451", "id":4 }, { "birthDate":"2022-06-30T14:11:27.647", "id":5 }, { "birthDate":"2022-06-30T14:55:41.41", "id":6 }, { "id":7, "birthDate":"2022-02-22T11:55:33.456" } ]Debiera ser:
[ { "birthDate":"2022-06-30T14:55:41.41", "id":6 }, { "birthDate":"2022-06-30T14:38:28.003", "id":1 }, { "birthDate":"2022-06-30T14:36:48.50", "id":2 }, { "birthDate":"2022-06-30T14:35:40.57", "id":3 }, { "birthDate":"2022-06-30T14:11:27.647", "id":5 }, { "birthDate":"2022-06-30T13:09:58.451", "id":4 }, { "id":7, "birthDate":"2022-02-22T11:55:33.456" } ]como puedo solucionarlo gracias
El problema es que se supone que la función de comparación devuelve un número positivo si a debe estar después de b, negativo si b debe estar después de a y cero si deben mantener el mismo orden. Su función devuelve verdadero y falso, JS convierte verdadero en 1 y falso en cero. Eso significa que nunca le estás diciendo a sort que ponga b después de a.
hacer que la función regrese
return new Date(a.birthDate) > new Date(b.birthDate) ? -1 : 1; // copied from a commentascendente
return new Date(a.birthDate) - new Date(b.birthDate);
descendiendo
return new Date(b.birthDate) - new Date(a.birthDate);