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

如何合并两个日期数组并对齐对应值数组,缺失值自动补0

实现思路
  • 先分别对两个日期数组和对应数值数组做分组聚合,得到「日期-同日期求和值」的映射表,解决同日期多值累加的需求
  • 合并两个日期数组后去重,将MM/YYYY格式的日期转换为可直接比较大小的数字格式后按升序排序,得到最终的目标日期数组
  • 遍历排序后的日期数组,分别从两个映射表中取值,无对应值的位置补0,再统一转为字符串格式即可
完整实现代码
var dates1 = ['1/2021', '1/2021', '12/2020'];
var values1 = ['-2500', '-150', '-10000'];

var dates2 = ['2/2021', '3/2021', '1/2021'];
var values2 = ['3000', '1000', '3000'];

// 工具函数:生成日期和对应求和值的映射表
function createDateSumMap(dates, values) {
  const map = {};
  dates.forEach((date, idx) => {
    const currentValue = Number(values[idx]);
    map[date] = (map[date] || 0) + currentValue;
  });
  return map;
}

// 生成两个分组映射表
const valueMap1 = createDateSumMap(dates1, values1);
const valueMap2 = createDateSumMap(dates2, values2);

// 合并日期去重后按时间升序排序
const allUniqueDates = [...new Set([...dates1, ...dates2])];
const sortedDates = allUniqueDates.sort((a, b) => {
  const [monthA, yearA] = a.split('/').map(Number);
  const [monthB, yearB] = b.split('/').map(Number);
  return yearA * 100 + monthA - (yearB * 100 + monthB);
});

// 对齐补0生成最终值数组
const finalValues1 = sortedDates.map(date => String(valueMap1[date] || 0));
const finalValues2 = sortedDates.map(date => String(valueMap2[date] || 0));

内容的提问来源于stack exchange,提问作者NewProgrammer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:24:03