查询string是否在一组数组中



我有一个用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;
}

这里和你的小提琴有两点不同

  1. $。inArray返回一个索引,不是True或False,所以如果找到了,索引将>= 0。如果没有找到索引,则返回-1。

  2. 我做了一个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)

最新更新