Javascript函数indexOf返回不正确的结果

时间:2014-09-07 23:52:43

标签: javascript arrays string integer indexof

我有这两个数组:

array1 = ["a,1", "b,2", "c3", "d4", "e5", "f6"];
array2 = [1, 2, 3, 4];

我试图找出第一个数组的元素是否在第二个数组中。

for (i = 0; i < array1.length; i++) { 
  if(array2.indexOf(array1[i][1]) != -1) {
    console.log('In array: '+array1[i][1]);
  } else {
    console.log('NOT in array: '+array1[i][1]);
}

在这种情况下,我总是收到消息 NOT in array ..

但如果我以这种方式修改代码:

for (i = 0; i < array1.length; i++) { 
  if(array2.indexOf(1) != -1) {
    console.log('In array: '+array1[i][1]);
  } else {
    console.log('NOT in array: '+array1[i][1]);
}

输出在数组中:...

使用数字作为 indexOf()函数的参数,它可以正常工作,但是变量没有......这怎么可能?

谢谢

1 个答案:

答案 0 :(得分:0)

在您的代码中:

if(array2.indexOf(array1[i][1]) != -1) {

是根据indexOf的算法使用严格比较将字符串与数字进行比较。此外,在大多数情况下,您正在比较 array1 中的错误字符。在:

"a,1"

字符1是逗号,而不是数字。你需要做的是从 array1 中的字符串中获取数字,将它们转换为数字类型,以便 indexOf 使用如下表达式:

+array1[i].replace(/\D/g,'')

然后进行比较,例如:

array1 = ["a,1", "b,2", "c3", "d4", "e5", "f6"];
array2 = [1, 2, 3, 4];


for (var i=0, iLen=array1.length; i<iLen; i++) {
    if (array2.indexOf(+array1[i].replace(/\D/g,'')) != -1) {
        console.log('In array: ' + array1[i]);
    } else {
        console.log('Not in array: ' + array1[i]);
    }
}

// In array: a,1
// In array: b,2
// In array: c3
// In array: d4
// Not in array: e5
// Not in array: f6

您可能需要修改正则表达式,以获取数字,具体取决于 array1 中可能包含的所有字符串。

另一种方法是将 array2 的成员转换为字符串,并在 array1 的成员中搜索它们。