2013-06-04 54 views
0

我有用JQuery编写的函数。我有一些阵列,像这样:查询字符串是否在任何一组数组中

var array1 = ["pink","yellow","green","red"], 
    array2 = ["peony","violet","rose","daisy"], 
    array3 = ["dalmation","kelpie","shepard","dachshund"], 

我有一个从输入一个值,称为

$query 

我想看看$查询的值等于任何值任何3个阵列的元素。如果是的话,我想知道它是哪个阵列。一个索引号(即array1的0,array2的1)会正常工作。

此的jsfiddle这里http://jsfiddle.net/hJrAA/从这个StackOverflow的问题Search multiple arrays for a string and then set a var - jQuery是诱人的,但无论怎样我改变输入查询的价值,

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

(其中“红”是查询),它总是返回相同的值(2)。

任何人都可以提出一种方法来修改该代码,以便它返回查询被发现的特定数组的引用?

+0

http://api.jquery.com/jQuery.inArray/似乎有关。 –

回答

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。我做了return i而不是设置索引并继续。这不仅会提前打破循环,还会返回第一个匹配的索引。你的原始代码总是会返回最后一场比赛。

+0

宾果!这就是我想要的。感谢你解释你所做的改变,这对了解那里正在发生的事情非常有帮助。 – Ila

+0

这是一个更新的JSFiddle与你的代码,以防未来的求职者有用:http://jsfiddle.net/bfKsZ/ – Ila

0

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

的$ .inArray()方法类似于JavaScript的原生.indexOf()方法 在它返回-1,当它没有找到一个匹配。如果阵列中的 第一个元素匹配值,$ .inArray()返回0

因为JavaScript把0作为松散等于假(即0 == 假的,但0!==假),如果我们重新检查数组中是否存在值 ,我们需要检查它是否不等于(或大于) -1。

if ($.inArray(val, arrays[i]) > -1) 
相关问题