如何在数组中的所有布尔值之间应用OR?

时间:2012-05-06 17:09:27

标签: javascript

我有

x = [false, false, true, true, false]

如果数组中至少有一个true,我想要一个返回true的函数,如下所示:http://jsfiddle.net/7uVWk/

x = [false, false, true, true, false];

function hasTrue(x) {
  result = false;
  ​for (var i=0; i <​x.length; i++) {
    result = result || x[i];
  }
}  
document.write(hasTrue(result));

如何更简洁地实现这一结果?

4 个答案:

答案 0 :(得分:5)

使用Array.prototype.some(我没有写一个单独的函数,因为这个语法已经很有意义了):

var x = [false, false, true, true, false];
x.some(function(val) {
    return val === true;
}); // true or false. In this case, true

答案 1 :(得分:4)

好吧,当你发现第一个真的时,你可以退出循环:

x = [false, false, true, true, false];

function hasTrue(x) {
  ​for (var i=0; i <​x.length; i++) {
    if(x[i]) return true;
  }
  return false;
}  
document.write(hasTrue(result));

那简洁吗?

答案 2 :(得分:2)

逻辑上或数组中的所有元素相当于其中一个元素为真。以下功能会更有效:

function arrayHasTrue(x_)
{
    for(var i = 0; i < x_.length; ++i)
    {
        if(x_[ i ])
        {
            return true;
        }
    }
    return false;
}

答案 3 :(得分:0)

你可以使用递归:

function hasTrue(x) {
  return x.length == 1 ? x[0] : x[0] || hasTrue(x.slice(1));
}