如何对数组去重索引并合并重复日期对应的数值?
解决重复日期的数值合并问题
刚好碰到过类似的需求,我来给你捋捋怎么处理这个数组~
核心思路就是用一个临时对象做映射,把日期作为键,对应的数值集合/总和作为值,这样就能轻松实现去重并合并同日期的数值。下面分两种常见的合并场景给你示例代码:
场景1:把同日期的所有数值收集到数组里
这种适合需要保留所有原始数值的情况,比如后续要做统计分析或展示明细:
var data = [ ['mars 21 21:37', 624], ['mars 21 21:37', 599], ['mars 21 21:37', 636], ['mars 21 21:37', 619], ['mars 21 21:37', 625], ['mars 21 21:37', 645], ['mars 21 21:37', 638], ['mars 21 23:24', 733], ['mars 21 23:24', 800], ['mars 21 23:24', 609], ['mars 21 23:24', 615], ['mars 22 09:20', 550], ['mars 22 09:20', 608], ['mars 22 09:20', 609] ]; // 创建临时映射对象,键是日期,值是对应数值的数组 const dateValueMap = {}; // 遍历原始数组,填充映射 data.forEach(([date, num]) => { // 如果当前日期还没在映射里,先初始化空数组 if (!dateValueMap[date]) { dateValueMap[date] = []; } // 把数值加入对应日期的数组 dateValueMap[date].push(num); }); // 转换为你需要的数组对象格式 const mergedData = Object.entries(dateValueMap).map(([date, values]) => ({ date: date, values: values })); console.log(mergedData);
运行后mergedData的结构大概是这样:
[ { date: 'mars 21 21:37', values: [624, 599, 636, 619, 625, 645, 638] }, { date: 'mars 21 23:24', values: [733, 800, 609, 615] }, { date: 'mars 22 09:20', values: [550, 608, 609] } ]
场景2:把同日期的数值求和
如果只需要同日期的数值总和,只需要稍微修改映射的逻辑:
var data = [ /* 原始数组内容 */ ]; const dateTotalMap = {}; data.forEach(([date, num]) => { // 初始化总和为0(如果日期不存在),再累加当前数值 dateTotalMap[date] = (dateTotalMap[date] || 0) + num; }); // 转换为数组对象格式 const mergedData = Object.entries(dateTotalMap).map(([date, total]) => ({ date: date, totalValue: total })); console.log(mergedData);
这样得到的结果就是每个日期对应数值总和的数组:
[ { date: 'mars 21 21:37', totalValue: 4386 }, { date: 'mars 21 23:24', totalValue: 2757 }, { date: 'mars 22 09:20', totalValue: 1767 } ]
两种方式都很灵活,你可以根据自己的实际需求来选~
内容的提问来源于stack exchange,提问作者HitAngry
相关产品推荐
相关产品推荐

