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

合并两个对象数组并跳过重复项,jQuery.merge出现重复结果如何解决

解决方案

对象数组无法直接通过普通合并方法自动去重,核心原因是对象是引用类型,直接判等不会对比内部属性。你可以基于唯一标识BookingId作为去重判断依据,以下是具体实现方法:

方法1:原生JS实现(无额外依赖,推荐)

利用Set存储已出现的唯一标识,合并数组后过滤重复项,时间复杂度为O(n):

// 存储已出现的BookingId,判断重复效率更高
const existedBookingIds = new Set();
// 合并两个数组后去重
const mergedResult = [...Array1, ...Array2].filter(item => {
  if (!existedBookingIds.has(item.BookingId)) {
    existedBookingIds.add(item.BookingId);
    return true;
  }
  return false;
});

如果需要兼容不支持ES6语法的旧环境,可改用以下写法:

var existedBookingIds = {};
var mergedResult = Array1.concat(Array2).filter(function(item) {
  if (!existedBookingIds[item.BookingId]) {
    existedBookingIds[item.BookingId] = true;
    return true;
  }
  return false;
});

方法2:结合jQuery方法实现

如果你希望沿用jQuery的相关API,可结合$.merge和$.grep实现,同时避免修改原数组:

var existedBookingIds = {};
// $.extend做浅拷贝避免$.merge修改原Array1
var mergedResult = $.grep($.merge($.extend([], Array1), Array2), function(item) {
  if (!existedBookingIds[item.BookingId]) {
    existedBookingIds[item.BookingId] = true;
    return true;
  }
  return false;
});

注意事项

  • 如果重复判断需要对比对象所有属性,可将BookingId替换为JSON.stringify(item),仅适用于两个数组中对象的字段顺序完全一致的场景。
  • 如果重复项的属性存在差异,可根据需求调整保留逻辑,比如保留后出现的数组的项,只要调整合并顺序即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:48:04