La fecha y la hora son números enteros, me gustaría ordenarlos y reducirlos según un formato actualizado, como la fecha debería estar actualizada y la hora militar también debería estar actualizada. Todos los valores son distintos en base a la identificación del objeto.
let arr = [ {"id": 1, "date": 20220518, "time": 1700}, {"id": 1, "date": 20220518, "time": 1500}, {"id": 1, "date": 20220518, "time": 2200}, {"id": 1, "date": 20220517, "time": 2300}, {"id": 2, "date": 20220518, "time": 1500}, {"id": 2, "date": 20220516, "time": 2100}, {"id": 3, "date": 20220518, "time": 1400}, {"id": 3, "date": 20220517, "time": 1900}, {"id": 3, "date": 20220518, "time": 1900}, {"id": 4, "date": 20220517, "time": 1900}, {"id": 4, "date": 20220516, "time": 1300}, {"id": 5, "date": 20220516, "time": 1600} ] // Result should be like this let arr = [ {"id": 1, "date": 20220518, "time": 2200}, {"id": 2, "date": 20220518, "time": 1500}, {"id": 3, "date": 20220518, "time": 1900}, {"id": 4, "date": 20220517, "time": 1900}, {"id": 5, "date": 20220516, "time": 1600} ] let arr = [ { id: 1, date: 20220518, time: 1700 }, { id: 1, date: 20220518, time: 1500 }, { id: 1, date: 20220518, time: 2200 }, { id: 1, date: 20220517, time: 2300 }, { id: 2, date: 20220518, time: 1500 }, { id: 2, date: 20220516, time: 2100 }, { id: 3, date: 20220518, time: 1400 }, { id: 3, date: 20220517, time: 1900 }, { id: 3, date: 20220518, time: 1900 }, { id: 4, date: 20220517, time: 1900 }, { id: 4, date: 20220516, time: 1300 }, { id: 5, date: 20220516, time: 1600 }, ]; const result = arr.filter( (item) => !arr.some( (i) => i.id === item.id && // assume the time is a 4 digits number i.date * 10000 + i.time > item.date * 10000 + item.time ) ); console.log(result); let arr = [ { id: 1, date: 20220518, time: 1700 }, { id: 1, date: 20220518, time: 1500 }, { id: 1, date: 20220518, time: 2200 }, { id: 1, date: 20220517, time: 2300 }, { id: 2, date: 20220518, time: 1500 }, { id: 2, date: 20220516, time: 2100 }, { id: 3, date: 20220518, time: 1400 }, { id: 3, date: 20220517, time: 1900 }, { id: 3, date: 20220518, time: 1900 }, { id: 4, date: 20220517, time: 1900 }, { id: 4, date: 20220516, time: 1300 }, { id: 5, date: 20220516, time: 1600 }, ]; const result = arr.reduce((previousArray, currentItem) => { const item = previousArray.find((i) => i.id === currentItem.id); if (item) { if (currentItem.date > item.date) { item.date = currentItem.date; item.time = currentItem.time; } else if (currentItem.date === item.date && currentItem.time > item.time) { item.time = currentItem.time; } } else { previousArray.push(currentItem); } return previousArray; }, []); console.log(result);Hay tantas formas en que no sé acerca de sus datos y lo que ha hecho hasta ahora. La lógica simple está debajo, puede filtrar los datos como se muestra a continuación o puede usar jquery.
Si desea ordenar la matriz, ordénela antes de volver a crearla.
//Raw data let arr = [{ "id": 1, "date": 20220518, "time": 1700 }, { "id": 1, "date": 20220518, "time": 1500 }, { "id": 1, "date": 20220518, "time": 2200 }, { "id": 1, "date": 20220517, "time": 2300 }, { "id": 2, "date": 20220518, "time": 1500 }, { "id": 2, "date": 20220516, "time": 2100 }, { "id": 3, "date": 20220518, "time": 1400 }, { "id": 3, "date": 20220517, "time": 1900 }, { "id": 3, "date": 20220518, "time": 1900 }, { "id": 4, "date": 20220517, "time": 1900 }, { "id": 4, "date": 20220516, "time": 1300 }, { "id": 5, "date": 20220516, "time": 1600 } ]; // Sort before creating the data arr.sort(function(a, b) { if (a.date >= b.date) { return 1; } else { return -1; } if (a.time >= b.time) { return 1; } else { return -1; } }); //Create the new array with required data let data = []; arr.forEach(function(e, i) { data[e.id] = e; }); console.log(data.filter(n => n));