1

我有

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

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

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

4 回答 4

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
于 2012-05-06T17:15:12.453 回答
4

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

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));

够简洁了吧?

于 2012-05-06T17:12:07.177 回答
2

对数组中的所有元素进行逻辑或运算等同于其中一个为真。以下功能会更有效:

function arrayHasTrue(x_)
{
    for(var i = 0; i < x_.length; ++i)
    {
        if(x_[ i ])
        {
            return true;
        }
    }
    return false;
}
于 2012-05-06T17:13:48.453 回答
0

你可以使用递归:

function hasTrue(x) {
  return x.length == 1 ? x[0] : x[0] || hasTrue(x.slice(1));
}  
于 2012-05-06T17:59:12.723 回答