如何合并JavaScript对象数组中的日期对象并按规则聚合数据?
解决方案:按日期聚合数据
原始数据(修正语法错误后)
const originalData = [ {date: "2022-12-28T07:37:16.859Z", min: 2, zone: "zone A"}, {date: "2022-12-28T07:38:13.859Z", min: 1, zone: "zone B"}, {date: "2022-12-28T07:36:15.859Z", min: 3, zone: "zone C"}, {date: "2022-12-31T07:37:16.859Z", min: 2, zone: "zone E"}, {date: "2022-12-25T07:37:16.859Z", min: 4, zone: "zone D"} ];
实现代码
// 按日期分组聚合 const aggregatedData = Object.values( originalData.reduce((acc, item) => { // 以日期作为分组键 const key = item.date; if (!acc[key]) { // 首次遇到该日期,初始化聚合对象 acc[key] = { date: key, min: 0, zone: [] }; } // 累加min值 acc[key].min += item.min; // 收集当前项的zone acc[key].zone.push(item.zone); return acc; }, {}) ).map(item => ({ ...item, // 将zone数组转为逗号分隔的字符串 zone: item.zone.join(", ") })); console.log(aggregatedData);
逻辑说明
- 用
reduce遍历原始数组,以date为键构建临时存储对象,实现按日期分组 - 首次遇到某日期时,初始化对应的聚合结构,包含日期、初始为0的min值、空zone数组
- 同日期的后续项,直接累加min值,并将zone存入数组
- 最后通过
Object.values提取所有聚合结果,再用map把zone数组转为逗号分隔的字符串
最终处理结果
[ {date: "2022-12-28T07:37:16.859Z", min: 6, zone: "zone A, zone B, zone C"}, {date: "2022-12-31T07:37:16.859Z", min: 2, zone: "zone E"}, {date: "2022-12-25T07:37:16.859Z", min: 4, zone: "zone D"} ]
内容的提问来源于stack exchange,提问作者chotya
相关产品推荐
相关产品推荐

