2012-09-04 12 views
43

可能性の重複:
How to short circuit Array.forEach like calling break?break文

私の条件が満たされた後、私は配列のマップ方法から抜け出すことができるように方法はありますか?私は以下を試しました"Illegal Break Statement" Error.これは私が思いついたいくつかのランダムな例です。

var myArray = [22,34,5,67,99,0]; 

var hasValueLessThanTen = false; 

myArray.map(function (value){ 
    if(value<10){ 
     hasValueLessThanTen = true; 
     break; 
    } 
    } 
); 

我々はforループを使用して行うことができますが、私たちはmapメソッドを使用して同じことを達成できるかどうかを知りたいと思いましたか?

+4

これは、Rob Wが指摘している疑問と重複しています。しかし、この誤解の原因は 'map'メソッドの使い方が間違っていることです。マップの値をマップすることを意図していますので、反復を止めることはできません。 – Yoni

+10

@Yoniは正しいです。 OPが壊れやすいforEachループを探している場合、['[] .every'](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/every )(継続するには 'true'を返し、中断しないようにする' ')' '[] .some'](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array)/some) - ブレークするにはtrueを返し、続行するにはtrueに戻します。 –

+0

または['[] .reduce'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)。第2引数として '[]'を渡し、条件が満たされたときにのみ変更します。 –

答えて

60

組み込みのArray.prototype.mapを使用することはできません。 @RobWにより示唆されるように、

var hasValueLessThanTen = false; 
for (var i = 0; i < myArray.length; i++) { 
    if (myArray[i] < 10) { 
    hasValueLessThanTen = true; 
    break; 
    } 
} 

以下であり、少なくとも一つの要素が存在するかどうかをテストするArray.prototype.someを使用し、:あなたがmapに任意の値を意図していない場合は、あなたは、代わりにシンプルなfor -loopを使用することができますあなたの関数に一致する要素が見つかった場合、ループを停止します。

var hasValueLessThanTen = myArray.some(function (val) { 
    return val < 10; 
}); 
+2

私はRobが既にそれを言及していたとしても、いくつかの例を認めました。人々はいつもコメントを見ているわけではありませんが、通常コードサンプルを少なくともatleastスキャンします! – TheOneWhoPrograms

+3

'Array.prototype.map'でなぜそれができないのですか? – Vadorequest

+2

@ Vadorequest私はjs newbieだったときに質問を投稿しました.'Array.prototype.map'はそのように使われるべきではありませんでした。それは、あなたがすべての要素を変換したい、全く異なる用途のためのヘルパーメソッドです。与えられた配列を別のバリアントに変換します。それで、 "すべての要素"について考えると、breakステートメントは必要ありません。breakステートメントが必要な場合は、マップが必要ないかもしれません。 私はiteratorを 'iterator'として使用しようとしていたので、この質問を投稿しました。イテレータが必要な場合は' for'ループまたは 'forEach'と' return' –