JavaScriptでbreakできるforeach

javascriptにはforEachメソッドというものがある。

array.forEach(function(value){
    console.log(value); 
});

これだとreturnしてもループ内の無名関数から抜けるだけで、ループからは抜けられない。 うまいことbreakできるforeachがないかと思って探してみたが、 そもそもjavascriptでforeach自体が鬼門らしい。

for-inという構文があるが、これだとarrayのlengthプロパティまで読み込まれてしまうらしい。 javascriptのfor-in文は、for-each文の代わりじゃない

他にも似たような記事が沢山出てくる。みんなforeachできなくて困っているみたいだ。 ただそのものズバリの解決策は見つからず。 色々探したがsomeメソッドで実現できそうだということがわかった。 配列内の要素を全てチェックする (some)

この記事内のサンプルコードのvalueCheckの中でconsole.logがけしてやって実行すると、 以下のような結果が得られた。

10
-2
ary1 : true<br>
10
32
0
7
8
12
ary2 : false<br>

ちゃんと-2のところでループを抜けてるし、これでなんとかなりそうだ。

MOZILLA DEVELOPER NETWORKによると、someメソッドの本来の目的は

与えられた関数によって実行されるテストに合格する要素が配列の中にあるかどうかをテストします。

ということらしい。

Written on March 5, 2013