元々もJavaScriptにIterator機能はありましたが、2025年になって大きな修正が入りました。
新しく追加された便利なメソッドで、コードをもっと簡潔に書けるようになりましたので記事でまとめてみました。
2025年追加のIterator機能
2025年のECMAScript仕様では、イテレーターに以下のような便利なメソッドが追加されました!
最初n個の操作
-
take(n)
: 最初のn要素だけを取得 -
drop(n)
: 最初のn要素をスキップ
Arrayのような操作
-
filter(predicate)
: 条件に合う要素だけをフィルタリング -
map(callback)
: 各要素を変換 -
flatMap(callback)
: 各要素を変換し、結果を平坦化 -
reduce(callback, initialValue)
: 要素を集約 -
forEach(callback)
: 各要素に対して処理を実行
変換系
-
toArray()
: イテレーターを配列に変換
take
の活用例
take
メソッドは特に便利で、今回はtake
の使い方から変わった書き心地を見ていきたいと思います。
take
は最初のn個の要素だけを取り出すことができます。
これで今までのArrayの操作と違って、全要素を処理せずに必要な部分だけを取得できるのでパフォーマンスを上げることができます。
簡単例
// 大きな配列から最初の5要素だけを取得して処理
const hugeLargeArray = Array.from({ length: 10000 }, (_, i) => i + 1);
// 従来の方法
// sliceだと10000個を全部まわらないといけない
const first5Legacy = hugeLargeArray.slice(0, 5);
// for文でも書けるが、一手間かかる
const first5WithForLoop = [];
for (let i = 0; i < hugeLargeArray.length && i < 5; i++) {
first5WithForLoop.push(hugeLargeArray[i]);
}
// 新しいtakeメソッドを使用
const first5WithTake = [...hugeLargeArray[Symbol.iterator]().take(5)];
// もっと短く書くことも可能
const first5Simple = [...hugeLargeArray.values().take(5)];
実用例
以下のように条件に一致する最初のn個の要素だけを取得する時、もっと関数型プログラミングぽくかけるようになりますね!
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// 最初の3つの偶数だけを取得
const firstThreeEven = [...numbers
.values()
.filter(n => n % 2 === 0)
.take(3)];
console.log("最初の3つの偶数:", firstThreeEven); // [2, 4, 6]
おわりに
あまり他の言語をいっぱい触ってきてはいませんが、Rustのようなiteratorの操作がこれからもできるようになっていくイメージでうかね~
新しく追加されたPromise.try
も気になるのでブログでまとめてみたいところ