使用array.includes检测数组是否包含目标数组失败,如何解决?
问题原因
JavaScript中数组属于引用类型,Array.prototype.includes()方法使用严格相等运算符(===)判断元素是否存在。你代码里的[0,0]和polygonBuild[0][0]里的[0,0]是两个独立的数组实例,引用地址不同,所以严格相等判断返回false,导致includes结果为false。
解决方案
方法一:用some + every逐元素比较
遍历目标数组,对每个子数组和要查找的数组逐个元素对比:
const polygonBuild = [[ [ [0, 0], [50, 0], [100, 0], [100, 50], [100, 100], [50, 100], [50, 50], [0, 50] ] ]]; const target = [0, 0]; const isEndEdge = polygonBuild[0][0].some(item => // 先确保长度一致,再逐元素对比 item.length === target.length && item.every((val, idx) => val === target[idx]) ); console.log(isEndEdge); // 输出 true
方法二:转字符串比较
将数组序列化为字符串后,用字符串的相等判断来匹配:
const polygonBuild = [[ [ [0, 0], [50, 0], [100, 0], [100, 50], [100, 100], [50, 100], [50, 50], [0, 50] ] ]]; const targetStr = JSON.stringify([0, 0]); const isEndEdge = polygonBuild[0][0].some(item => JSON.stringify(item) === targetStr); console.log(isEndEdge); // 输出 true
两种方法的注意点
- 方法一:只适用于元素为基本类型(数字、字符串等)的数组,对比精准,不会出现序列化导致的异常。
- 方法二:如果数组包含
undefined、function、Symbol这类无法被JSON.stringify正确序列化的值,会出现匹配错误,慎用。
内容的提问来源于stack exchange,提问作者pcace
相关产品推荐
相关产品推荐

