js,$ .inArray,没有返回预期的回报

时间:2013-02-13 00:39:16

标签: javascript jquery arrays match

我想问一个问题,为什么这不起作用?

http://jsfiddle.net/2FMue/4/

var a = $('input').attr('value').split(',');

if(a instanceof Array) alert(1);

if($.inArray($('#id').text(), a)) alert(2);

if($.inArray('United State', a)) alert(3);

// a is array but no return correct match.

我将一个值拆分为数组并使用$ .inArray来检查数组中字符串的位置。

但它不会返回正确的索引。

我不知道这个例子有什么问题。请指教。

非常感谢。

5 个答案:

答案 0 :(得分:3)

来自DOCS:

  

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

所以:

if( $.inArray($('#id').text(), a) != -1) alert(2);

答案 1 :(得分:2)

效果非常好。

$.inArray返回给定数组中找到的元素的索引(如果找不到,则返回-1。)

举个例子,

$.inArray("United State", ["United State", "America"]) ===  0
$.inArray("Unknown", ["United State", "America"])      === -1

因此,为了检查元素是否存在于数组中,您必须使用:

if ($.inArray("Unknown", ["United State", "America"]) > -1) {
    // ...
}

答案 2 :(得分:2)

  

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

     

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

在此处阅读更多内容:http://api.jquery.com/jQuery.inArray/

答案 3 :(得分:2)

搜索词是否是数组中的第一个元素?这将返回0,javascript视为false。你的if语句应该是:

if($.inArray($('#id').text(), a) < 0) alert(2);

阅读文档http://api.jquery.com/jQuery.inArray/

答案 4 :(得分:1)

分割中的数组是基于0的索引,并且您要求的字符串是第一个,因此它返回0值 - 这是假的,因此您在条件内的警报不会因为您获得0而触发来自inArray的索引。

将您的输入值更改为“fred,United State,America”,您会看到它警报。