jQuery inArray总是返回-1

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

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

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

 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)把它转换成一个数字……

试试这个:

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

警告:grep返回一个数组。

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

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

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

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

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

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

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

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

var lastProductID =“6758”;

在我的情况下,我试图做:

var foo = date.getTime()/ 1000;

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

但是你可以把它转换成一个字符串:

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

希望能帮助别人:)