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

如何高效校验一个数组的所有元素是否存在于另一个数组中

数组子集校验实现方案

JavaScript 没有提供可以直接完成「判断一个数组所有元素都存在于另一个数组」的单体内置方法,但可以通过组合原生API实现,你可以根据数据规模选择对应性能的写法。


基础写法(适合百级元素以内的小规模数据)

直接组合数组的every()和includes()方法即可实现逻辑,写法最简洁:

const arr1 = ['abc', 'def']
const arr2 = ['abc', 'def', 'ghi', 'jkl']

// 校验不通过直接返回
if (!arr1.every(item => arr2.includes(item))) return

// 校验通过,后续业务逻辑写在这里

注意:这个写法的时间复杂度是O(m*n)(m为arr1长度,n为arr2长度),因为includes()每次执行都会从头到尾线性遍历arr2,数据量较大时性能会明显变差。


最优性能写法(适配任意数据规模,大数据量下优先选)

利用Set结构的O(1)时间复杂度查找特性,可以把整体时间复杂度降到O(m+n),数据量越大性能优势越明显:

const arr1 = ['abc', 'def']
const arr2 = ['abc', 'def', 'ghi', 'jkl']

// 提前剪枝:如果arr1长度比arr2还长,不可能满足包含关系,直接返回
if (arr1.length > arr2.length) return

// 仅遍历一次arr2,生成用于快速查找的Set结构
const arr2Set = new Set(arr2)
if (!arr1.every(item => arr2Set.has(item))) return

// 校验通过,后续业务逻辑写在这里

如果arr1本身存在重复元素,可以先对arr1去重再遍历,进一步减少无效查找:

const arr2Set = new Set(arr2)
if (![...new Set(arr1)].every(item => arr2Set.has(item))) return

适配说明

由于你的数组存储的都是String类型的原始值,不存在引用地址不一致导致的判断偏差,上述两种写法的判断结果都是准确的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:54:30