如何判断一个数组是否存在于另一个数组中?
判断数组是否存在于另一个数组中的替代方法
在JavaScript里,直接用indexOf()或includes()判断子数组是否存在于父数组中会失效,比如这段代码:
var grades = [['English', 'A'], ['Math', 'B'], ['Geography', 'C']]; var englishGrade = ['English', 'A']; Logger.log(grades.indexOf(englishGrade)); // 代码返回-1而非预期的0
原因是indexOf()和includes()用**严格相等(===)**比较元素,两个内容相同的独立数组属于不同引用,所以匹配失败。
下面是几种可行的解决方法:
用
some()+every()逐项对比
遍历父数组,先检查数组长度是否一致,再逐个对比每一项内容:const exists = grades.some(grade => grade.length === englishGrade.length && grade.every((item, idx) => item === englishGrade[idx]) ); Logger.log(exists); // 输出true转字符串后对比
将数组转为JSON字符串(或用join()拼接),再用字符串方法判断:const gradesStr = grades.map(g => JSON.stringify(g)); const targetStr = JSON.stringify(englishGrade); Logger.log(gradesStr.includes(targetStr)); // 输出true注意:如果数组包含无法JSON序列化的元素(如函数、Symbol),这种方法不适用。
封装通用工具函数
写一个可复用的函数,处理各种数组包含判断场景:function isSubArrayExist(parentArr, subArr) { return parentArr.some(item => { if (!Array.isArray(item) || item.length !== subArr.length) return false; return item.every((val, idx) => val === subArr[idx]); }); } Logger.log(isSubArrayExist(grades, englishGrade)); // 输出true
内容的提问来源于stack exchange,提问作者Mavelus Foo
相关产品推荐
相关产品推荐

