我无法弄清楚为什么当lastProductID在数组中时,我为lastProductIndex持续获得-1!
var lastProductID = 6758;
var allProductIDs = [5410, 8362, 6638, 6758, 7795, 5775, 1004, 1008, 1013]
var lastProductIndex = $.inArray(lastProductID, allProductIDs);
答案 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.
答案 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);
希望能帮到某人:)