2015-05-04 32 views
0

毅有一個環路上接收到一個新的字符串元素有史以來2秒數組:應該怎樣一個正確的JavaScript數組檢查一個串上一個循環

//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」。因此,我可以結束多個在陣列中相同的條目。那麼爲什麼我的代碼不能一致地匹配元素?

這基本上是整個腳本。沒有其他東西觸及數組。

非常感謝!

ģ

+1

tl; dr [Array.indexOf()MDN](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf) – Jonathan

+0

你當然是對的。不知道我在想什麼。我已經將測試更改爲> = 0,因爲我需要檢查索引0.是否有人可以爲我分配一些數字點數?那就是你得到一個銀行假期。 – KolKurtz

回答

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,如果你在兩個調用中發送相同的數組?可能你可以將它放在一個共同的外部命名空間中!

+0

@Mytri它不能是整數,因爲他按照他的解釋僅傳遞字符串。這也是整個代碼,所以它不可能 – wallop

+0

我發送arrayz,因爲這是一個多用途函數,接受不同的數組出於不同的原因。 – KolKurtz

+0

啊對。我無法弄清楚上面的代碼,因爲製造不存在於其他地方,也因爲你提到這是整個代碼:) – wallop

1

試試這個

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

1

如果未找到該元素,然後-1將被退回,爲此你的檢查會失敗,因爲你檢查,如果該指數大於0更大。

您需要檢查:

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

1

indexOf()回報-1時沒有找到的元素。 0的意思是「我發現元素在數組的第一個位置」,這顯然不是你想要的。

你應該改變

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

我會合並它們,但我有另一個條件後添加。 – KolKurtz

0

試試這個

(arrayz.indexOf(addable) !== -1)?(console.log("FOUND")):((console.log("NOT FOUND")) || (arrayz.push(addable))); console.log(arrayz); 
相關問題