如何在对象数组中按日期分组查找每组holiday_for属性最大值的对象
解决方案
你之前的代码仅做了全局的holiday_for优先级比对,没有按日期分组处理,按如下修改reduce逻辑即可实现需求:
const holidays = [ { id: 1, holiday_for: 1, holiday_on: "2021-10-26" }, { id: 2, holiday_for: 3, holiday_on: "2021-10-26" }, { id: 3, holiday_for: 1, holiday_on: "2021-11-26" }, { id: 4, holiday_for: 3, holiday_on: "2021-11-26" }, { id: 5, holiday_for: 4, holiday_on: "2021-11-26" } ]; const filtered = Object.values(holidays.reduce((acc, cur) => { const currentDate = cur.holiday_on; // 若当前日期没有存储记录,或当前项的holiday_for优先级更高,就替换存储值 if (!acc[currentDate] || cur.holiday_for > acc[currentDate].holiday_for) { acc[currentDate] = cur; } return acc; }, {}));
逻辑说明
- 以
holiday_on日期值为累加器对象的键,每个键对应的值是该日期下当前优先级最高的假期对象 - 遍历所有元素时,若当前日期未在累加器中记录,或当前元素的
holiday_for值大于已存储的同日期对象的值,就更新累加器中对应日期的存储值 - 最后用
Object.values()把累加器对象中的所有值提取为数组,即为你需要的输出结果,输出格式如下:
[ { id: 2, holiday_for: 3, holiday_on: "2021-10-26" }, { id: 5, holiday_for: 4, holiday_on: "2021-11-26" } ]
内容的提问来源于stack exchange,提问作者RAHUL KUNDU
相关产品推荐
相关产品推荐

