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

JavaScript:用另一数组的对象替换目标数组中的匹配对象

解决方案:合并事件数组并替换匹配项

要实现将array1中与array2时间(start和end同时匹配)一致的事件替换为array2的对应项,最终得到无重复的正确事件集合,我们可以利用对象映射来快速查找和覆盖匹配项,步骤清晰且效率较高。

实现思路

  1. 构建一个以start + end为唯一标识的映射表,先存入array1的所有事件;
  2. 遍历array2的事件,用相同标识的事件覆盖映射表中的原有项(确保array2的事件优先保留);
  3. 将映射表中的值转换为数组,就是我们需要的array3。

代码实现

// 原始数组
var array1 = [ { start: '2018-04-24T10:00:00', end: '2018-04-24T11:00:00', title: 'Been to Break' } ];
var array2 = [ 
  { start: '2018-04-24T08:00:00', end: '2018-04-24T10:00:00', title: 'Lunch' }, 
  { start: '2018-04-24T10:00:00', end: '2018-04-24T11:00:00', title: 'Break' }, 
  { start: '2018-04-24T13:00:00', end: '2018-04-24T14:00:00', title: 'Meeting' } 
];

// 创建映射表,用start+end作为唯一键
const eventMap = {};

// 先存入array1的事件
array1.forEach(event => {
  const key = `${event.start}${event.end}`;
  eventMap[key] = event;
});

// 遍历array2,覆盖匹配项并添加新项
array2.forEach(event => {
  const key = `${event.start}${event.end}`;
  eventMap[key] = event;
});

// 转换为数组得到array3
const array3 = Object.values(eventMap);

console.log(array3);

输出结果

运行上述代码后,array3的内容为:

[
  { start: '2018-04-24T08:00:00', end: '2018-04-24T10:00:00', title: 'Lunch' },
  { start: '2018-04-24T10:00:00', end: '2018-04-24T11:00:00', title: 'Break' },
  { start: '2018-04-24T13:00:00', end: '2018-04-24T14:00:00', title: 'Meeting' }
]

完全符合需求:array1中10:00-11:00的事件被array2的对应项替换,同时保留了两个数组中所有不重复的事件。

扩展说明

如果你的事件可能存在时区或者时间格式的细微差异,可以考虑使用Date对象生成唯一键,确保匹配的准确性:

const getEventKey = event => {
  return new Date(event.start).getTime() + '-' + new Date(event.end).getTime();
};

之后用这个函数生成映射表的键即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:36:51