Estaba trabajando con algunos datos que se ven así.
response={data:[{ "time": "08:00", "date": "2022-06-30" }, { "time": "16:30", "date": "2022-06-30", }, { "time": "17:00", "date": "2022-06-27" }, { "time": "11:00", "date": "2022-06-14" }, { "time": "17:00", "date": "2022-06-14" }, { "time": "08:30", "date": "2022-06-02" }, { "time": "16:30", "date": "2022-06-02" }, { "time": "16:30", "date": "2022-06-02" }, { "time": "16:25", "date": "2022-06-02", }]}Quería ordenar estos datos por dos campos (hora y fecha).
requisito se ve bastante sorprendente. Busqué en Internet pero no puedo obtener los resultados requeridos.
así que pasé un tiempo en ello e hice mi propia solución. así que estoy aquí para compartir esta solución con stackoverflow-community.
aquí está mi solución .
import moment from 'moment'; import { forEach, get, reverse } from 'lodash'; const data = get(response, 'data', []); //as data looks already in descending order by date reverse(data); //place datetime object in all items forEach(data, function(item) { item['datetime'] = moment(item.date + 'T' + item.time + ':' + '00'); }); //re-sort data by time in ascending order using datetime object data.sort(function(a, b) { return a.datetime - b.datetime; });está funcionando bien, pero avíseme si tenemos una solución mejor que debería ser eficiente.
también hágamelo saber acerca de sus comentarios para esta solución.
La tarea también se puede realizar sin lodash, simplemente comparando cadenas de fecha y hora. La comparación de las fechas ocurre primero. Si uno es más grande que el otro entonces la segunda comparación de los tiempos ni siquiera ocurrirá, ya que || El operador (o) solo evaluará su segundo argumento si el primer argumento se calculó como "falso" (en nuestro caso, 0 ).
const response={data:[{ "time": "08:00", "date": "2022-06-30" }, { "time": "16:30", "date": "2022-06-30" }, { "time": "17:00", "date": "2022-06-27" }, { "time": "11:00", "date": "2022-06-14" }, { "time": "17:00", "date": "2022-06-14" }, { "time": "08:30", "date": "2022-06-02" }, { "time": "16:30", "date": "2022-06-02" }, { "time": "16:30", "date": "2022-06-02" }, { "time": "16:25", "date": "2022-06-02" }]}; const res=response.data.slice(0).sort((a,b)=> a.date.localeCompare(b.date)||a.time.localeCompare(b.time)); console.log(res);