我有一个用JQuery编写的函数。我有一些数组,像这样:
var array1 = ["pink","yellow","green","red"],
array2 = ["peony","violet","rose","daisy"],
array3 = ["dalmation","kelpie","shepard","dachshund"],
我有一个输入的值,叫做
$query
我想知道$query的值是否等于这3个数组中任何一个元素的值。如果是,我想知道它是哪个数组。索引号(例如array1为0,array2为1)就可以了。
这个JSFiddle在这里http://jsfiddle.net/hJrAA/从这个StackOverflow问题搜索多个数组的字符串,然后设置一个变量- jQuery是诱人的,但无论我改变输入查询的值,
console.log(inArrays('red', first, second, third));
(其中'red'是查询)它总是返回相同的值(2)。
谁能建议一种方法来修改代码,使它返回一个引用,查询被发现在特定的数组?
如果您只想返回找到的第一个数组的索引,我会这样做:
function inArrays(val) {
var arrays = Array.prototype.slice.call(arguments, 1);
var idx = -1;
var i = 0;
while (i < arrays.length) {
if ($.inArray(val, arrays[i]) > -1) {
return i; // Breaks out of the loop as soon as a match is found
}
i++;
}
return idx;
}
这里和你的小提琴有两点不同
$。inArray返回一个索引,不是True或False,所以如果找到了,索引将>= 0。如果没有找到索引,则返回-1。
我做了一个
return i
而不是设置索引并继续。这不仅会提前跳出循环,还会返回第一个匹配项的索引。您的原始代码将始终返回最后匹配。
http://api.jquery.com/jQuery.inArray/
$.inArray()方法类似于JavaScript的原生。indexof ()方法,当它没有找到匹配时返回-1。如果数组中的第一个元素匹配value, $. inarray()返回0。
因为JavaScript将0视为松散地等于false(即0 ==)False,但是0 !== False),如果我们正在检查是否存在值在数组中,我们需要检查它是否不等于(或大于)1 .
if ($.inArray(val, arrays[i]) > -1)