如何查找二维数组中子数组的索引?解决indexOf返回-1问题
二维数组中查找子数组的解决办法
为什么total.indexOf(arr)返回-1?因为数组是引用类型,indexOf用严格相等(===)判断匹配,两个内容相同的数组内存地址不一样,自然判定不相等。
下面给两种实用的解决方法:
方法一:自定义数组比较函数 + findIndex
先写个函数判断两个数组内容是否完全一致,再用findIndex遍历二维数组查找匹配项:
// 判断两个数组是否相等的辅助函数 function arraysEqual(a, b) { // 长度不同直接返回false if (a.length !== b.length) return false; // 逐个元素对比 for (let i = 0; i < a.length; i++) { if (a[i] !== b[i]) return false; } return true; } // 实际使用 const total = [[0,1],[0,2]]; const arr = [0,2]; const matchIndex = total.findIndex(item => arraysEqual(item, arr)); console.log(matchIndex); // 输出1,找到匹配的下标
方法二:JSON序列化后对比(适合简单元素)
如果数组里的元素都是数字、字符串、普通对象这类能被JSON序列化的类型,可以把数组转成字符串再比较:
const total = [[0,1],[0,2]]; const arr = [0,2]; const targetStr = JSON.stringify(arr); const matchIndex = total.findIndex(item => JSON.stringify(item) === targetStr); console.log(matchIndex); // 输出1
注意事项
- 方法二局限性大:如果数组包含函数、
undefined、Symbol这类无法被JSON序列化的元素,会导致对比结果错误,这时候优先用方法一。 - 如果只需要判断是否存在(不需要下标),可以把
findIndex换成some,直接返回布尔值。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

