如何在JavaScript中使用reduce方法查找最新created日期的对象
问题:找出数组中created日期最新的对象
我有如下数组:
const items = [ { id: 'djw8701', created: '2019-10-05T11:06:20.208Z', url: 'url1' }, { id: 'djw8702', created: '2019-10-15T12:06:21.208Z', url: 'url2' }, { id: 'djw8703', created: '2019-10-20T13:06:22.208Z', url: 'url3' } ]
希望比较数组中的对象,找出created日期最新的对象(即items[2]),但编写的reduce方法返回空值:
items?.reduce((curr, acc) => { if (curr.created < acc.created) { return { ...acc }; } })
问题分析与修正
你的reduce代码存在三个核心问题:
- 参数顺序颠倒:reduce回调的第一个参数是累加器(acc),第二个是当前遍历元素(curr),你搞反了顺序,导致比较逻辑完全错误。
- 缺少默认返回值:当条件不满足时没有返回值,会让后续迭代的累加器变成undefined,最终返回空。
- 冗余的对象解构:直接返回目标对象即可,不需要用
{ ...acc }做无意义的拷贝。
修正后的代码如下:
const latestItem = items?.reduce((acc, curr) => { // ISO格式的日期字符串可直接按字典序比较大小 return curr.created > acc.created ? curr : acc; }, items[0]); // 传入初始值,确保迭代逻辑从第一个元素开始
补充说明
- 传入初始值
items[0]可以避免数组只有单个元素时的异常,同时让逻辑更清晰。 - 如果需要处理数组为空的情况,可以额外判断:
const latestItem = items?.length ? items.reduce((acc, curr) => curr.created > acc.created ? curr : acc, items[0]) : null; // 数组为空时返回null,可根据需求调整默认值
内容的提问来源于stack exchange,提问作者Balalayka
相关产品推荐
相关产品推荐

