使用 JavaScript 的 IndexOf 在数组中查找数组

Finding an Array within an Array using IndexOf of JavaScript

我正在尝试进行非常简单的 indexOf 搜索,但没有成功。

我有一个这样的二维数组:

var fruits = new Array([]);
fruits.push(["Banana", "Orange", "Apple", "Mango"]);
fruits.push(["Apple", "3Orange", "Amar", "Mango"]);
fruits.push(["Apple", "1Orange", "Amar", "Mango"]);
fruits.push(["Apple", "2Orange", "Amar", "Mango"]);

现在我正在创建另一个数组,如下所示,它匹配上面数组的第三条记录:

var str = new Array([]);
str.push(["Apple", "2Orange", "Amar", "Mango"]);

现在我尝试查找 fruits 中是否存在 str:

var i  = fruits.indexOf( str );
alert(i);

但是我returns -1 而不是一个有效的索引值。我做错了什么?

编辑

我想出了一个更简单的方法。以下是似乎也有效的方法:

var strFruits = fruits.toString();
var newStr = str.toString();
var i  = fruits.indexOf( str );
alert(i);

这显然存在跨两条记录查找匹配值的缺陷。但就我而言,我知道这是不可能的,因为我使用的数据集的性质。作为一般解决方案不是一个好的做法,但在特定情况下它可能很方便。

如果您将一个对象传递给 Array.prototype.indexOf(),那么将验证它的引用而不是它的值。所以你必须写这样的代码来实现你想要的,

var str = new Array([]);
str.push(["Apple", "2Orange", "Amar", "Mango"]);
var i  = checkIt(fruits, str[0]);
alert(i);

function checkIt(src, arr){
  arr = arr.toString();
  var ind = -1;
  src.forEach(function(itm,i){
    if(itm.toString() == arr){
      ind = i;
      return;
    }
  });
  return ind;
}

DEMO

var arr1 = [1,2,3]; 
var arr2 = [1,2,3];

console.log(arr1 == arr2)   //false
console.log(arr1 === arr2)  //false

来自 MDN

indexOf() compares searchElement to elements of the Array using strict equality (the same method used by the ===, or triple-equals, operator).

和 2 个对象,即使具有相同的内部属性,也不会匹配。

所以要匹配,你需要比较数组中的元素来匹配它

要比较数组中的元素,你可以按照SO中的另一个问题,LINK