如何正确检查循环中javascript数组中的字符串

时间:2015-05-04 10:24:49

标签: javascript arrays

y我有一个数组在循环中接收一个新的字符串元素2秒:

//tick world
setInterval(function(){
  doTradeUpdate();
},5000);

function doTradeUpdate(){
  var randyManu = Math.floor(Math.random() * 10);
  switch(randyManu){
  case 0:
  //new duro mine
  countPush(manufacture,"duro-mine");
  break;

  case 1:
  //new e-plant
    countPush(manufacture,"e-plant");
    break;
//etc
}

function countPush(arrayz,addable){
  console.log(arrayz);
  console.log("Attempting to add: " + addable);
  if(arrayz.length == 0){
    arrayz.push(addable);
  }
  else{
    if (arrayz.indexOf(addable)  > 0){
       console.log("FOUND");
    }
    else{
        console.log("NOT FOUND");
        arrayz.push(addable);
    }
  }
}

如果我让这段代码运行,有时结果将显示为FOUND,有时对于相同的数组元素显示为NOT FOUND,例如:" e-plant"。因此,我最终可以得到阵列中相同的多个条目。为什么我的代码不能始终匹配元素?

这基本上就是整个脚本。没有别的东西接触阵列。

非常感谢!

5 个答案:

答案 0 :(得分:1)

使用

if (arrayz.indexOf(addable) !== -1)
{
  console.log("FOUND");
}
else
{
  console.log("NOT FOUND");
  arrayz.push(addable);
}

即。使用(!== -1)而不是(> 0)。
如果元素位于0,则表示未找到。 您还可以优化如下

function countPush(arrayz,addable)
{
console.log(arrayz);
console.log("Attempting to add: " + addable);
if(Array.isArray(arrayz))
{
  if(arrayz.indexOf(addable) !== -1) {
    console.log('Exists and found');
  }
  else {
    arrayz.push(addable);
  }
}    
}

有更好的方法来检查变量是否是一个数组,我只是举个例子!
另一点,如果你在两个电话中发送相同的数组,为什么每次都要发送arrayz?也许你可以在一个共同的外部命名空间中拥有它!

答案 1 :(得分:1)

试试这个



 if (arrayz.indexOf(addable)  > -1)
        {
            console.log("FOUND");
        }
        else
        {
            console.log("NOT FOUND");
            arrayz.push(addable);
        }




答案 2 :(得分:1)

如果找不到该元素,则会返回-1,因此您的检查将失败,因为您检查索引是否大于0

您需要检查:

(arrayz.indexOf(addable) !== -1)

答案 3 :(得分:1)

indexOf()在找不到该元素时会返回-10表示"我在数组的第一个位置找到了元素",这显然不是你想要的。

你应该改变

if (arrayz.indexOf(addable)  > 0)

if (arrayz.indexOf(addable) > -1) 

或者,甚至更好,合并你的ifs结束:

function countPush(arrayz,addable) {
    console.log(arrayz);
    console.log("Attempting to add: " + addable);

    // Same as nested ifs, due to short-circuiting
    if(arrayz.length === 0 || arrayz.indexOf(addable) === -1) {
        console.log("NOT FOUND");
        arrayz.push(addable);
    } else {
        console.log("FOUND");
    }
}

答案 4 :(得分:0)

试试这个

{{1}}