如何在JavaScript数组中按日期与名称合并重复数据
JavaScript数组按日期+名称分组并合并空值
可以通过分组映射+值合并的方式实现需求,核心思路是先以「日期+名称」为唯一标识分组,再对每组内的元素进行空值填充,最终得到合并后的数组。
实现代码
const originalArray = [ ['10/08/2022', 'AA', '08:00', '12:00', '', '17:00'], ['10/08/2022', 'BB', '08:01', '13:15', '14:16', '17:01'], ['10/08/2022', 'AA', '', '', '13:00', ''], ['10/08/2022', 'CC', '09:00', '11:30', '12:30', '18:00'] ]; // 构建分组映射并合并空值 const mergedGroups = originalArray.reduce((map, item) => { // 生成唯一分组键:日期+名称 const groupKey = `${item[0]}_${item[1]}`; if (!map.has(groupKey)) { // 首次出现该分组,直接存入副本 map.set(groupKey, [...item]); } else { // 已有分组,遍历每个字段填补空值 const existingItem = map.get(groupKey); item.forEach((val, idx) => { // 仅当已有值为空且当前值非空时替换 if (existingItem[idx] === '' && val !== '') { existingItem[idx] = val; } }); } return map; }, new Map()); // 将映射转换为结果数组 const resultArray = Array.from(mergedGroups.values()); console.log(resultArray);
代码说明
- 分组逻辑:用
Map存储分组,键由「日期(下标0)+名称(下标1)」拼接而成,确保同一日期+名称的元素被分到同一组。 - 空值合并:遍历每个元素时,若分组已存在,则逐个检查字段——如果已有字段为空,就用当前元素的非空值填补;若已有字段非空,则保留原值。
- 结果转换:最后将
Map中的值转换为数组,得到最终合并后的结果。
运行代码后,输出结果与示例完全一致。
内容的提问来源于stack exchange,提问作者Fragosojp
相关产品推荐
相关产品推荐

