如何判断一维数组是否存在于二维数组?includes()失效问题排查
为什么
includes()返回false? JavaScript里数组是引用类型,includes()方法使用严格相等运算符(===)判断元素是否存在。你代码里的[3,"nader"]是新创建的数组,和原数组里的[3,"nader"]虽然内容相同,但它们指向不同的内存地址,所以===判定不相等,导致includes()返回false。
解决办法
方法1:直接比较子数组元素(固定长度场景)
如果你的子数组都是固定长度(比如这里都是2个元素),可以直接逐个对比元素值:
const arr = [ [1,"kader"], [3,"nader"], [2,"sader"], [7,"abul"] ]; const target = [3, "nader"]; const isExist = arr.some(item => item[0] === target[0] && item[1] === target[1]); console.log(isExist); // 输出 true
方法2:通用子数组内容匹配(任意长度场景)
如果子数组长度不固定,用every()配合索引实现通用的内容对比:
const arr = [ [1,"kader"], [3,"nader"], [2,"sader"], [7,"abul"] ]; const target = [3, "nader"]; const isExist = arr.some(item => item.length === target.length && item.every((val, idx) => val === target[idx]) ); console.log(isExist); // 输出 true
方法3:转字符串比较(慎用)
把数组转成JSON字符串后对比,这种方法简单但有局限——如果子数组元素包含逗号、引号这类特殊字符,可能会出现匹配错误:
const arr = [ [1,"kader"], [3,"nader"], [2,"sader"], [7,"abul"] ]; const targetStr = JSON.stringify([3, "nader"]); const isExist = arr.some(item => JSON.stringify(item) === targetStr); console.log(isExist); // 输出 true
内容的提问来源于stack exchange,提问作者Mahmudul
相关产品推荐
相关产品推荐

