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

如何查找二维数组中子数组的索引?解决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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:44:59