2011-07-14 21 views
4

有什麼辦法在JS中使用布爾代數?在JavaScript中的布爾代數

例如我想循環遍歷一個包含真的& false的數組,並將其簡化爲true或false。

與布爾代數做這似乎是一種優雅的方式來做到這一點...

[true,true,true,true] //would like to do a comparison that lets me 
//simply add the previous value to the current iteration of a loop 
// and have this return true 

[false,true,true,true]//this on the other hand should return false 
+0

你的意思是和他們在一起嗎? – n8wrl

回答

19

我認爲,一個簡單的解決辦法是

return array.indexOf(false) == -1 
+0

+1簡單 – digitalbath

+0

doh我應該想到那個大聲笑 –

+2

這不會在ie7或更少的工作,除非你手動定義indexOf函數 – Adam

5

你的意思是這樣的:

function all(array) { 
    for (var i = 0; i < array.length; i += 1) 
     if (!array[i]) 
      return false; 
    return true; 
} 

或者是有什麼你正在尋找更復雜?

+0

+1因爲它很簡單,可以很容易地轉換爲處理邏輯OR而不是AND的要求,它與使用'.indexOf()'的接受答案基本相同,只是它可以在所有瀏覽器中使用。 – nnnnnn

0
for(var i=0; i < array.length;++i) { 
    if(array[i] == false) 
     return false; 
} 
return true; 
1
function boolAlg(bools) {  
    var result = true; 

    for (var i = 0, len = bools.length; i < len; i++) { 
     result = result && bools[i] 

    } 

    return result; 
} 

或者你可以使用這種形式,這是更快:

function boolAlg(bools) {  
    return !bools[0] ? false : 
     !bools.length ? true : boolAlg(bools.slice(1)); 
} 
15

嘗試Array.reduce

[false,true,true,true].reduce(function(a,b) { return a && b; }) // false 

[true,true,true,true].reduce(function(a,b) { return a && b; }) // true 
+0

這不適用於不支持ES5的瀏覽器! – Adam

+0

@adam公平點。 – digitalbath