Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQUERY不匹配_Javascript_Jquery_Arrays_Json - Fatal编程技术网

Javascript JQUERY不匹配

Javascript JQUERY不匹配,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,我正在和他一起工作,我希望yinz能帮上忙 我有AJAX,它可以从我的数据库中提取一些用户ID。它是JSON编码的,并作为一个数组下拉。然而,当我尝试将一个值与数组匹配时,我总是得到-1。它从不匹配 我已经发出了一系列警报,试图弄清楚到底发生了什么,但我一辈子都不知道为什么它不起作用。为了便于讨论,让我们假设它所拉下来的用户是1、2和3。图像集合中表示的用户标识是1、2、3、4、5 $.ajax({ dataType: "json", url: "/* some url */",

我正在和他一起工作,我希望yinz能帮上忙

我有AJAX,它可以从我的数据库中提取一些用户ID。它是JSON编码的,并作为一个数组下拉。然而,当我尝试将一个值与数组匹配时,我总是得到-1。它从不匹配

我已经发出了一系列警报,试图弄清楚到底发生了什么,但我一辈子都不知道为什么它不起作用。为了便于讨论,让我们假设它所拉下来的用户是1、2和3。图像集合中表示的用户标识是1、2、3、4、5

$.ajax({
    dataType: "json",
    url: "/* some url */",
    success: function (players) {
        $("#userpics img").each(function () {
            var userid = $(this).data("userid");
            alert (players); // 1,2,3
            alert (userid); // 1
            alert ("is array? " + Array.isArray(players)); // true
            alert ("in array? " + $.inArray(userid, players)); // -1
            alert ("in object? " + (userid in players)); // false
            alert ("match? " + (userid == players[0])); // true
        })
   }
});
如您所见,在第一个警报中,正在下拉的数组显示为字符串,但在第三个警报中,它解析为数组。即使
userid=1
并且下拉的数据是
[“1”、“2”、“3”]
它仍然无法与
inArray
匹配。但是,当我匹配
userid==players[0]
时,它匹配

我完全被难住了

试试看

返回数组中元素的索引(如果找到)

搜索数组中的第一个元素时,结果将为

在JavaScript中,Zero的计算结果为false

您需要显式地将inArray()的结果与
-1
进行比较,以确定它是否包含元素

使用以下命令:

if (inArray(val, someArray) !== -1) {
    alert("it's in there...");
}
取而代之的是:

if (inArray(val, someArray)) {
    alert("This won't work for the first element.");
}

看起来就像是将字符串与数字数组进行比较

这可能是您获得此输出的原因

还要检查它是否返回负索引,因为这表明该项不在数组中

if( $.inArray(userid, players) > - 1){

    // Item in array
}

对玩家做一个console.log(),你就会明白为什么它不起作用。希望你能把它打印在这里以获得更好的帮助。是字符串数组还是数字数组?userid呢?你从
(userid==players[0])
中得到了什么?我建议您停止对数据类型进行假设,并开始确保它们正是您想要的。您可以使用
parseInt
确保变量是一个数字。您还可以尝试阅读jQuery.inArray()或
$.inArray(userid+“”,players)
jahroy的文档-我最初在userid声明中使用了parseInt。这并没有解决问题。但是你的类型测试肯定是有意义的起作用,==不起作用。我认为,这一定意味着json正在将int作为字符串进行下拉。您应该明确检查返回值是否不等于
-1