我正在尝试进行非常简单的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);
这显然存在在两个记录之间查找匹配值的缺陷。但就我而言,我知道由于我正在使用的数据集的性质,这是不可能的。作为通用解决方案,这不是一个好的做法,但在特定情况下它可能很方便。
最佳答案
如果将对象传递给 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
关于javascript - 使用 JavaScript 的 IndexOf 在数组中查找数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35650984/