jQuery总是返回-1

jQuery总是返回-1,jquery,Jquery,我不明白为什么在数组中有lastProductID的情况下,lastProductIndex总是得到-1 var lastProductID = 6758; var allProductIDs = [5410, 8362, 6638, 6758, 7795, 5775, 1004, 1008, 1013] var lastProductIndex = $.inArray(lastProductID, allProductIDs); 您是否在页面中使用其他JavaScript库 如果需要,则$速

我不明白为什么在数组中有lastProductID的情况下,lastProductIndex总是得到-1

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

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

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

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

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

这让我起初也很困惑,我遇到了相同的问题。似乎是jQuery.inArray()需要一个字符串。因此您可以执行以下操作:

var lastProductID=“6758”

就我而言,我试图做到:

var foo=date.getTime()/1000

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

但您可以将其转换为字符串:

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

希望这对某人有所帮助:)

试试这个:

$.grep(allProductIDs, function(n) { return n == lastProductID; });
警告:grep返回一个数组


看起来jQuery对inArray执行了===而不是==操作。

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

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)
将其转换为数字

$.inArray()
方法类似于JavaScript的本机
.indexOf()
方法,在未找到匹配项时返回-1 数组中的第一个元素匹配
$。inArray()
返回0

根据:

几分钟前,您发布了一个关于此的问题..其中包括两个代码示例..什么是
allProductId.indexOf(lastProductID)
return?是的,这与完全不同的东西有关。为什么我的indexOf得到-1。你建议使用inArray。这是一个单独的问题,因为我无法理解为什么在使用inArray时我得到-1。所以这就是为什么我将它分离出来,并且我可以在这里显示代码,就像我在注释中用代码回复一样sh**是未格式化的!所以这不是同一个问题!-1,这是我在另一篇文章中遇到的第一个问题。你不能在整数数组上使用indexOf。@coffee:你可以,只是不能在IE上使用。我使用的是标准JavaScript和一些jQuery的混合体。我使用的是JCarousel>>的一些函数$shorthand可能存在冲突如果是的话。不是问题……即使在我使用索引融合时,我也遇到了同样的问题。在我现有的函数中,自动执行的匿名函数最终隐藏了lastProductIndex变量,因此我最终出现了一个错误,说lastProductIndex变量不存在于尝试引用它的后面的行中o在函数外部声明lastProductIndex,并在函数内部为其赋值。您最好给自己一个正确的答案。这是您应得的。:-)当然,如果它是强类型语言,您的代码将无法编译。老实说,当您将一个变量用于多个目的时,可能会发生这种情况(最重要的是,不止一种数据类型):)如果我有一种强类型语言,我可以依赖于数据类型。如果在使用jQuery的JavaScript中,我在输入字段上调用
val()
,我不想依赖该类型。令我惊讶的是,虽然我需要数字,但大部分是字符串。我不熟悉===或这种技术。因此,将左边的参数作为n传递到函数中。然后返回n,它对lastProductID进行某种查找?是的,数组不是我想要返回的。不过功能不错。我解决了我的问题,见上文。这比@iim.hlk的答案更适合我,因为我的“lastProductID”可以是字母字符串。+1,哇。。谢谢真是太棒了。。。它还可以处理日期计算。$.inArray不需要字符串。OPs代码工作正常-。检查$.inArray的源代码-它只是运行并进行===比较。字符串无关,除非您试图将4与“4”进行比较。我有相同的问题,这解决了我的问题。。谢谢我谢谢你,伙计,这帮了我。似乎4对我来说是一个字符串。var data=[“2”,“4”];$。inArray(字符串(4),数据);如果您有一堆字符串(数组)和一个指针作为int.String()