Булева алгебра в javascript

Есть ли способ использовать булеву алгебру в JS?

Например, я хотел бы перебрать массив, содержащий true и 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

person Alex    schedule 14.07.2011    source источник
comment
Вы имеете в виду «и-инг» их всех вместе?   -  person n8wrl    schedule 14.07.2011


Ответы (4)


Я думаю, что простым решением было бы

return array.indexOf(false) == -1
person Lourens    schedule 14.07.2011
comment
Это не будет работать в ie7 или младше, если вы не определите функцию indexOf вручную. - person Adam; 14.07.2011

Попробуйте 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
person digitalbath    schedule 14.07.2011

Вы имеете в виду как:

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

Или вы ищете что-то более сложное?

person David Wolever    schedule 14.07.2011
comment
+1, потому что он простой, его можно легко преобразовать для обработки требования логического ИЛИ вместо И, и он по сути такой же, как принятый ответ, который использует .indexOf(), за исключением того, что он будет работать во всех браузерах. - person nnnnnn; 15.07.2011

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));
}
person Adam    schedule 14.07.2011