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

JavaScript中如何比较长度不同的两个数组返回布尔结果

不同长度数组的比较实现(返回布尔值)

针对你给出的两个长度不同、存在共有值的数组,根据实际判断逻辑的不同,最常用的两种场景实现如下,均做了性能优化:


场景1:判断两个数组是否存在公共元素(有交集即返回true,无交集返回false)

优先用Set存储短数组元素做查询优化,比嵌套遍历、Array.includes的性能高很多,适合任意长度的数组比较:

let array1 = [3, 1, 2, 5];
let array2 = [1, 2, 3];

function hasIntersection(arr1, arr2) {
  // 自动选更短的数组转Set,减少内存占用和遍历成本
  const [shortArr, longArr] = arr1.length < arr2.length ? [arr1, arr2] : [arr2, arr1];
  const checkSet = new Set(shortArr);
  return longArr.some(item => checkSet.has(item));
}

// 示例中两个数组有公共值,输出true
console.log(hasIntersection(array1, array2));

场景2:判断短数组是否为长数组的子集(短数组所有值都在长数组中存在即返回true,否则返回false)

同样用Set优化查询效率:

let array1 = [3, 1, 2, 5];
let array2 = [1, 2, 3];

function isSubset(childArr, parentArr) {
  const parentSet = new Set(parentArr);
  return childArr.every(item => parentSet.has(item));
}

// 示例中array2的所有元素都在array1中存在,输出true
console.log(isSubset(array2, array1));
// 反过来判断array1是否为array2的子集,因为元素5不在array2中,输出false
console.log(isSubset(array1, array2));

注意事项

  • 以上实现仅适用于数组元素为基本类型(数字、字符串、布尔值、null、undefined、Symbol)的场景,如果数组存储的是对象、数组这类引用类型值,需要先自定义值的比对规则再判断。
  • 尽量避免写嵌套for循环+includes的比对逻辑,这类写法时间复杂度为O(m*n),数组数据量大时性能会明显下降,基于Set的实现时间复杂度仅为O(m+n)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:09:25