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

时间:2016-02-26 11:51:35

标签: javascript arrays multidimensional-array find indexof

我试图做一个非常简单的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"]);

现在我试着找出水果中是否存在str:

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

但是我返回-1而不是有效的索引值。有人可以指出我做错了什么。

由于

==============编辑===================

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

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

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

2 个答案:

答案 0 :(得分:1)

如果将对象传递给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

答案 1 :(得分:1)

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

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

MDN

  

indexOf()使用strict将searchElement与Array的元素进行比较   相等(===使用的相同方法,或三等于,   操作者)。

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

所以为了匹配,你需要用它里面的元素比较数组来匹配它

要比较数组中的元素,您可以在SO中跟随另一个问题,LINK

相关问题