0

我有一个用 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 问题Search multiple arrays for a string 然后设置一个 var - jQuery很诱人,但无论我将输入查询的值更改为什么,

 console.log(inArrays('red', first, second, third));

(其中 'red' 是查询)它总是返回相同的值 (2)。

谁能建议一种修改该代码的方法,以便它返回对在其中找到查​​询的特定数组的引用?

4

2 回答 2

1

如果您只想返回找到的第一个数组的索引,我会这样做:

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而不是设置索引并继续。这不仅会更早地跳出循环,还会返回第一个匹配项的索引。您的原始代码始终会返回最后一个匹配项。

于 2013-06-04T21:14:55.757 回答
0

http://api.jquery.com/jQuery.inArray/

$.inArray() 方法类似于 JavaScript 的原生 .indexOf() 方法,因为它在找不到匹配项时返回 -1。如果数组中的第一个元素与值匹配,则 $.inArray() 返回 0。

因为 JavaScript 将 0 视为松散地等于 false(即 0 == false,但 0 !== false),如果我们要检查数组中是否存在值,我们需要检查它是否不等于(或大于) -1。

if ($.inArray(val, arrays[i]) > -1)
于 2013-06-04T21:12:00.273 回答