我试图做一个非常简单的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);
这显然有两个记录找到匹配值的缺陷。但就我而言,我知道由于我使用的数据集的性质,这是不可能的。作为一般解决方案不是一种好的做法,但在特定情况下它可能很方便。
答案 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;
}
答案 1 :(得分:1)