1

私は持っている

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

次のように、配列にtrue少なくとも 1 つある場合に返す関数が必要です: 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

配列内のすべての要素を論理的に OR することは、そのうちの 1 つだけが true であることと同等です。次の関数ははるかに効率的です。

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 に答える