为什么二维数组的索引返回-1

Why does this index of a two dimensional array return -1

本文关键字:返回 索引 二维数组 为什么      更新时间:2023-09-26

我有以下代码:

alert( [[0,1],[1,0]].indexOf([0,1]) );

即使数组[0,1]是二维数组的一个元素,我也会返回值"-1"。我在生活中做错了什么?

它找不到您的元素,因为[0, 1][0, 1]不等于44

console.log(4 === 4); // true
console.log([0, 1] === [0, 1]); // false

当您对object类型的事物进行相等性检查时,Javascript将使用所谓的引用相等性。它检查这两个对象是否实际上是相同的实例

var a = [0, 1];
var b = [1, 0];
var arr = [a, b];
console.log(arr.indexOf(a)); // 0
console.log(a === arr[0]); // true

或者,您可以使用深度相等检查编写自己的搜索函数。

function deepSearch(arr, element) {
  for(var index = 0; index < arr.length; index++) {
    if(deepEqual(arr[index], element)) {
      return index;
    }
  }
  return -1;
}

简短的回答:因为[0,1] === [0,1]就是false

根据.indexOf文件,

indexOf()使用严格相等(===或三重相等运算符使用的方法相同)比较Array的searchElementelements

您可以使用一个技巧来序列化您的子数组和目标项
它起作用,因为[0,1] !== [0,1],但"[0,1]" === "[0,1]":

Array.prototype.indexOfForArrays = function(search)
{
  var searchJson = JSON.stringify(search); // "[0,1]"
  var arrJson = this.map(JSON.stringify); // ["[3,4]", "[0,1]", "[1,0]"]
  return arrJson.indexOf(searchJson);
};
document.body.innerText = [[3,4], [0,1], [1,0]].indexOfForArrays([0,1]); 

还有其他一些方法。这个堆栈溢出问题可能很有用。