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

使用JavaScript的IndexOf在数组中查找数组,javascript,arrays,multidimensional-array,find,indexof,Javascript,Arrays,Multidimensional Array,Find,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"

我试图做一个非常简单的索引搜索,但没有成功

我有这样一个二维数组:

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);

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

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

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

indexOf()使用严格的 相等(与===或三重相等使用的方法相同, 操作员)

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

因此,为了匹配,您需要通过数组中的元素来比较数组以匹配它

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

来自

indexOf()使用严格的 相等(与===或三重相等使用的方法相同, 操作员)

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

因此,为了匹配,您需要通过数组中的元素来比较数组以匹配它


要比较数组中的元素,可以按照中的另一个问题进行操作,

“array.prototype.indexOf()不能接受对象作为其参数”不正确<代码>变量x={}
console.log([x].indexOf(x))
@Evantimboli当然是的,但这不是一个好的实践。这就是我以那种方式提到的。现在让我更正帖子。@RajaprabhuAravindasamy我真的需要str[0]在checkIt(水果,str[0]);?不仅仅是str就足够了吗?@Anjum那就足够了,但它会破坏可读性,因为它是一个多维数组。实际上str实际上是一个一维数组,因为它包含一条记录。我们甚至可以使用这个符号,我相信str=[“Apple”,“2Orange”,“Amar”,“Mango”];在这种情况下,[0]显然无效。但总的来说我同意。谢谢,“Array.prototype.indexOf()无法接受对象作为其参数”不正确<代码>变量x={}
console.log([x].indexOf(x))
@Evantimboli当然是的,但这不是一个好的实践。这就是我以那种方式提到的。现在让我更正帖子。@RajaprabhuAravindasamy我真的需要str[0]在checkIt(水果,str[0]);?不仅仅是str就足够了吗?@Anjum那就足够了,但它会破坏可读性,因为它是一个多维数组。实际上str实际上是一个一维数组,因为它包含一条记录。我们甚至可以使用这个符号,我相信str=[“Apple”,“2Orange”,“Amar”,“Mango”];在这种情况下,[0]显然无效。但总的来说我同意。谢谢