jQuery inArray总是返回-1

时间:2009-07-01 21:16:48

标签: jquery

我无法弄清楚为什么当lastProductID在数组中时,我为lastProductIndex持续获得-1!

var lastProductID = 6758;
var allProductIDs = [5410, 8362, 6638, 6758, 7795, 5775, 1004, 1008, 1013]
var lastProductIndex = $.inArray(lastProductID, allProductIDs);

6 个答案:

答案 0 :(得分:44)

昨天我遇到了同样的问题,

var data=[2,4,6,8];
alert( $.inArray(4,data) ) // output 1 as expected
alert( $.inArray("4",data) ) // output -1 as expected 

通常,当您从输入元素或返回字符串的内容中获取要检查的值时,会发生这种情况。您需要parseInt(string,radix)将其转换为数字...

答案 1 :(得分:9)

请改为尝试:

$.grep(allProductIDs, function(n) { return n == lastProductID; });

警告:grep返回一个数组。

看起来jQuery用inArray做了===而不是==。

答案 2 :(得分:6)

这就是为什么每个人都讨厌非TYPED的语言。我最初使用一个值设置lastProductIndex值,但它是一个字符串(因为我从返回的JSON中获取了HttpResponse对象的值。因此我将变量设置为字符串,因为返回的JSON值是一个字符串当我将数字6758硬编码为$ .inArray时,它工作正常,引起了我的注意。

答案 3 :(得分:3)

  

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

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

答案 4 :(得分:0)

您是否在页面中使用任何其他JavaScript库?

如果你是$速记可能会有冲突。这可以通过多种方式解决,其中一种方法是将代码包装在一个自动执行的匿名函数中

(function($) {
    var lastProductIndex = $.inArray(lastProductID, allProductIDs);
})(jQuery);

答案 5 :(得分:-1)

一开始我也很困惑,我遇到了同样的问题。似乎jQuery.inArray()需要一个字符串。所以你可以这样做:

  

var lastProductID =“6758”;

就我而言,我试图这样做:

  

var foo = date.getTime()/ 1000;

总是导致-1从$ .inArray()

返回

但你可以把它转换为字符串:

  

var foo = String(date.getTime()/ 1000);

希望能帮到某人:)