2014-02-11 43 views
0

有一個簡單的布爾時,它是簡單地使用它的條件:檢查數組成員是真的

var running = true; 
if(running) {/*do something*/} 

是有一些技巧與boolen陣列做到這一點?是這樣的:

var running = [false,false,true,false]; 
if(running[]){/*do something*/} 

在我不喜歡這樣的時刻:

var uploading = false 
      for(i=0; i< running.length ; i++) 
      { 
       if(running[i]) uploading = true; 
      } 

      if(uploading) 

但我覺得這是不是真的完全編寫的代碼,他們的可能是一些技巧,速記方法..可能是普通的JavaScript,可能是jQuery的

回答

5

jQuery的有$.inArray方法:

uploading = $.inArray(running, true) !== -1; 

該名稱稍有誤導,它返回匹配元素的索引(如果沒有,則返回-1)。

JavaScript有Array#indexOf,但它缺少在IE8和更早版本:

uploading = running.indexOf(true) !== -1; 

JavaScript作爲ES5的有Array#some方法,但它是矯枉過正,如果你可以尋找與任何上述的特定值。不過,如果你需要按摩這些數值,這很有用。舉例來說,如果任何「truthy」值是好的,而不是具體true

uploading = running.some(function(entry) { return !!entry; }); 
+0

很容易爲[Array.prototype.indexOf]包含一個polyfill(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)。 – RobG

+0

@RobG:的確是,但如果你已經使用jQuery ... –

1

你可以使用這個:

uploading = running.indexOf(true) !== -1; 

如果數組不包含trueindexOf將返回 - 1,從!== -1導致false。如果數組包含trueindexOf將返回索引,導致產生true

甲稍短選項:

uploading = !!~running.indexOf(true); 

~是按位NOT,此從的indexOf反轉值:-1 -> 0, 0 -> -1, 1 -> -2, etc。然後雙!首先將此值轉換爲布爾值,然後再次將其反轉,產生一個布爾輸出,即true,然後該數組包含true

+0

'上傳= !!〜running.indexOf(真)'如果你想有一個布爾結果 – elclanrs

+1

或'running.indexOf(真)> - 1'。 – undefined

+0

是的,如果'index'是'0',那仍然是'false'。確實需要一個'!='或其他操作符。 – Cerbrus

0

我只是想約小竅門,可以在這種情況下工作:

uploading = !!Math.max.apply(null, [false, true, false, false]); // => true 

基本上沒有!!路徑,你會得到1(如果有至少一個true)或false(在陣列中的所有false) 。 Max爲每個傳遞的參數調用ToNumber,所以true =>1

注意:你最好使用indexOf,這只是爲了好玩,並展示另一種不明顯的方式。

+0

_JavaScript,你好嗎? JavaScript,stahp!_我不知道這是甚至接近可能的:D – Cerbrus

+0

我知道,這很愚蠢。但有趣。 – dfsq

相關問題