You need to enable JavaScript to run this app. JavaScript中如何计算包含重复值的两个数组的差值
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何计算包含重复值的两个数组的差值

支持重复元素的数组差集提取实现

我们需要判断一个数组是否被另一个数组包含,并返回前者中缺失的元素,且需要兼容数组存在重复值的场景,具体效果符合以下示例:

getDiff([1, 2, 3], [1, 2, 3, 4]) --> []

getDiff([1, 2, 2, 3], [1, 2, 3, 4]) --> [2]

getDiff(["A", "B", "C"], ["B", "B", "A", "C"]) --> []

getDiff(["B", "B", "B"], [3, 2, 1]) --> ["B", "B", "B"]

实现思路

  • 统计第二个数组中所有元素的出现频次,存储为哈希映射结构
  • 遍历第一个数组的每一个元素:若当前元素在哈希映射中还有剩余计数,则扣除1次计数;若没有剩余计数,则将该元素加入缺失结果数组
  • 最终返回的缺失数组就是前者中未被后者包含的元素

代码实现

function getDiff(sourceArr, targetArr) {
  // 统计目标数组的元素出现频次
  const freqMap = {};
  for (const item of targetArr) {
    freqMap[item] = (freqMap[item] || 0) + 1;
  }

  const missingItems = [];
  // 遍历源数组匹配频次
  for (const item of sourceArr) {
    if (freqMap[item] > 0) {
      freqMap[item]--;
    } else {
      missingItems.push(item);
    }
  }

  return missingItems;
}

注意事项

  • 该实现时间复杂度为O(n+m),其中n和m分别是两个数组的长度,性能优于嵌套遍历的暴力方案
  • 仅支持基础类型(数字、字符串、布尔值、null、undefined)的直接匹配,若需要支持引用类型(对象、数组)的匹配,可自行修改哈希映射的key生成逻辑,比如将元素序列化后作为key

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:57:03