You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对数组去重索引并合并重复日期对应的数值?

解决重复日期的数值合并问题

刚好碰到过类似的需求,我来给你捋捋怎么处理这个数组~

核心思路就是用一个临时对象做映射,把日期作为键,对应的数值集合/总和作为值,这样就能轻松实现去重并合并同日期的数值。下面分两种常见的合并场景给你示例代码:

场景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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:51:44