概要
-
高階関数の
forEach
はfor
文と異なり、処理途中で break できません。そこで、代替コードで break できる様にする方法を考えてみました。 -
書く動機となった元記事
なぜ我々は頑なにforを避けるのか
実装
- 高階関数
find
findによるfor-breakの代替コード
;[1, 3, 5, 7].find(
it => {
console.log(it)
return it === 5 // Same as `if (it === 5) break`
}
)
// 1
// 3
// 5
- 高階関数
reduce
reduceによるfor-breakの代替コード
;[1, 3, 5, 7].reduce(
(bye, it) => {
if (bye) return bye
console.log(it)
return it === 5 // Same as `if (it === 5) break`
},
false
)
// 1
// 3
// 5
- 高階関数
some
someによるfor-breakの代替コード
;[1, 3, 5, 7].some(it => {
console.log(it)
return it === 5 // Same as `it (it === 5) break`
})
// 1
// 3
// 5
- 高階関数
every
everyによるfor-breakの代替コード
;[1, 3, 5, 7].every(it => {
console.log(it)
return it !== 5 // Same as `it (it === 5) break`
})
// 1
// 3
// 5
まとめ
-
本来の
find
やreduce
,some
,every
の使い方ではないため、可読性にかなり難があります。 -
これらは本来、代入文の右辺として使われます。右辺に書かれてないなら「本来の使い方ではない」ので、
for-break
の代替で使われてるのかと気づけそうです。 -
「他にもっと好い方法があります!」と云う方は、コメント欄で教えて下さい!