基于两个条件减少javascript中的数组



假设我们有一个对象数组,如:

[ 
{ id: 1, time: "2021-05-02 10:12:45.123" },
{ id: 1, time: "2021-05-02 11:12:45.123" },
{ id: 1, time: "2021-05-02 12:12:45.123" },
{ id: 2, time: "2021-05-02 05:12:45.123" },
{ id: 1, time: "2021-05-01 12:12:45.123" },
{ id: 2, time: "2021-05-01 05:12:45.123" },
{ id: 2, time: "2021-05-01 04:12:45.123" },
{ id: 3, time: "2021-05-01 10:12:45.123" },
]

因此,我的目的是减少javascript中的数组,使结果为->每天的每个Id都有最新时间,如:

[ 
{ id: 1, time: "2021-05-02 12:12:45.123" },
{ id: 2, time: "2021-05-02 05:12:45.123" },
{ id: 1, time: "2021-05-01 12:12:45.123" },
{ id: 2, time: "2021-05-01 05:12:45.123" },
{ id: 3, time: "2021-05-01 10:12:45.123" },
]

请你帮忙。提前感谢

使用reduce可以轻松实现结果

const arr = [
{ id: 1, time: "2021-05-02 10:12:45.123" },
{ id: 1, time: "2021-05-02 11:12:45.123" },
{ id: 1, time: "2021-05-02 12:12:45.123" },
{ id: 2, time: "2021-05-02 05:12:45.123" },
{ id: 1, time: "2021-05-01 12:12:45.123" },
{ id: 2, time: "2021-05-01 05:12:45.123" },
{ id: 2, time: "2021-05-01 04:12:45.123" },
{ id: 3, time: "2021-05-01 10:12:45.123" },
];
const result = arr.reduce((acc, curr) => {
if (acc.length && acc[acc.length - 1].id === curr.id) {
if (new Date(acc[acc.length - 1].time) < new Date(curr.time)) {
acc[acc.length - 1] = { ...acc[acc.length - 1], ...curr };
}
} else acc.push(curr);
return acc;
}, []);
console.log(result);

最新更新