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

如何在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);

代码说明

  1. 分组逻辑:用Map存储分组,键由「日期(下标0)+名称(下标1)」拼接而成,确保同一日期+名称的元素被分到同一组。
  2. 空值合并:遍历每个元素时,若分组已存在,则逐个检查字段——如果已有字段为空,就用当前元素的非空值填补;若已有字段非空,则保留原值。
  3. 结果转换:最后将Map中的值转换为数组,得到最终合并后的结果。

运行代码后,输出结果与示例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 15:30:52