jQuery inArray - 问题

时间:2011-09-15 04:20:04

标签: javascript jquery

假设我的变量a的值为:

1

然后我有一个数组b,其值为:

[1, 2]

$.inArray(a, b)为什么给我一个-1?我应该0,对吧?

2 个答案:

答案 0 :(得分:6)

您所描述的确切地告诉我0 [fiddle]

var a = 1, b = [1, 2];
alert($.inArray(a, b)); // alerts "0"

但是,当我这样做时,我可以复制你的结果(如IAbstractDownvoteFactory建议的那样):

var a = 1, b = ["1", "2"];
alert($.inArray(a, b)); // alerts "-1"
var a = "1", b = [1, 2];
alert($.inArray(a, b)); // alerts "-1"

.inArray只能找到与您搜索的内容相同的匹配项(它们与===进行比较)。如果您无法使输入数据格式正确,您可以自己完成:

a转换为数字:

a = +a; // or a = Number(a);

b的所有元素转换为数字:

for (var i = 0; i < b.length; i++) {
    b[i] = +b[i];
}

答案 1 :(得分:0)

不是转换为数字,而是转换为字符串可能更好,例如在您使用id的情况下,例如在某些情况下,它们将使用数字实体ID而在其他情况下使用字符串,例如字符串。英国的国家代码是GB。

确保所有值都设置为字符串

Arr[] = mixedValue.toString();

然后始终确保您的比较针是一个字符串

if ($.inArray(needle.toString(), Arr) === -1) {
    // nope
} else {
    // yep
}