0

我正在与inArray一起工作,我希望 yinz 能提供帮助。

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

我已经发出了一系列警报,试图弄清楚发生了什么,但我终其一生都无法弄清楚为什么它不起作用。为了争论起见,假设它下拉的用户是#s 1、2和3。图像集合中表示的用户ID是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]它匹配。

我完全被难住了。

4

2 回答 2

0

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

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

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

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

    // Item in array
}
于 2012-10-16T01:35:27.713 回答
0

尝试阅读文档...

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

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

在 JavaScript 中,零的计算结果为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.");
}
于 2012-10-16T01:31:58.777 回答