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

如何检查两个无序数组是否包含相同数据(附JavaScript示例)

检查两个数组是否包含相同元素(不关心顺序)

你当前的代码存在问题:它是按索引位置逐个比较元素,只有当两个数组元素顺序完全一致时才会判定为相同,但你需要的是不关心排列顺序的检查逻辑——比如你给的示例里,array1和array2元素完全相同只是顺序不同,这段代码会输出"Do not contain the same data",这显然不符合你的需求。

下面提供两种简单高效的实现方式:

方法一:排序后比较(简单易实现)

先判断两个数组长度是否一致,不一致直接返回false;若长度一致,将两个数组排序后逐个比较元素是否相同。这种方法适合元素为基本类型(字符串、数字等)且数组规模不大的场景,时间复杂度为O(n log n)。

const array1 = ['foo', 'apple', 'bar'];
const array2 = ['bar', 'apple', 'foo'];

function arraysHaveSameElements(arr1, arr2) {
  if (arr1.length !== arr2.length) return false;
  // 先复制数组再排序,避免修改原数组
  const sortedArr1 = [...arr1].sort();
  const sortedArr2 = [...arr2].sort();
  return sortedArr1.every((val, index) => val === sortedArr2[index]);
}

if (arraysHaveSameElements(array1, array2)) {
  console.log("包含相同的数据");
} else {
  console.log("不包含相同的数据");
}

方法二:哈希表统计次数(高效且支持重复元素)

用Map统计第一个数组中每个元素的出现次数,再遍历第二个数组减少对应元素的计数,若过程中遇到不存在的元素或计数为0的情况,直接返回false;最后检查所有元素的计数是否都为0。这种方法时间复杂度为O(n),效率更高,且能正确处理数组中存在重复元素的场景。

const array1 = ['foo', 'apple', 'bar', 'apple'];
const array2 = ['bar', 'apple', 'foo', 'apple'];

function arraysHaveSameElements(arr1, arr2) {
  if (arr1.length !== arr2.length) return false;
  
  const countMap = new Map();
  // 统计第一个数组的元素出现次数
  for (const item of arr1) {
    countMap.set(item, (countMap.get(item) || 0) + 1);
  }
  // 遍历第二个数组,校验并减少计数
  for (const item of arr2) {
    const currentCount = countMap.get(item);
    if (!currentCount) {
      return false;
    }
    countMap.set(item, currentCount - 1);
  }
  // 确认所有元素计数都已清零
  return Array.from(countMap.values()).every(count => count === 0);
}

if (arraysHaveSameElements(array1, array2)) {
  console.log("包含相同的数据");
} else {
  console.log("不包含相同的数据");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:10:36