我正在与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]
时,它匹配。
我完全难过了。
答案 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
}