如何合并两个日期数组并对齐对应值数组,缺失值自动补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
相关产品推荐
相关产品推荐

