JQUERY inArray不匹配

时间:2012-10-16 01:21:16

标签: javascript jquery arrays json

我正在与inArray一起撕裂我的头发,我希望yinz可以提供帮助。

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

我已经发布了一系列警报,试图弄清楚发生了什么,而且我不能为我的生活解释为什么它不起作用。为了论证,我们假装它下拉的用户是#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]时,它匹配。

我完全难过了。

2 个答案:

答案 0 :(得分:0)

尝试阅读the documentation ...

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

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

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.");
}

答案 1 :(得分:0)

看起来就像是在比较字符串和数字数组。

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

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

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

    // Item in array
}