Iterator.from()
Baseline
2025
最近利用可能
March 2025以降、この機能は最新のバージョンの端末およびブラウザーで動作します。古い端末やブラウザーでは動作しないことがあります。
Iterator.from() は静的メソッドで、イテレーターや反復可能オブジェクトから新しい Iterator オブジェクトを作成します。
構文
Iterator.from(object)
引数
返値
object が反復可能オブジェクトである場合、そのオブジェクトの [Symbol.iterator]() メソッドが呼び出され、イテレーターが取得されます。 それ以外の場合は、 object がイテレーターであると見なされます。 イテレーターがすでに instanceof Iterator である場合(つまり、そのプロトタイプチェーンに Iterator.prototype がある場合)は、直接返されます。 それ以外の場合は、元のイテレーターをラップする新しい Iterator オブジェクトが作成されます。
解説
このメソッドは、おそらくライブラリーからエクスポートされた独自のイテレーターを正規イテレーターに変換するために存在します。 Iterator.from() が返すイテレーターオブジェクトはすべて、共通のプロトタイプオブジェクトを継承しており、このプロトタイプには次のメソッドが備わっています。
例
>反復可能オブジェクトを正規イテレーターに変換
すでに obj は反復可能オブジェクトであり、その [Symbol.iterator]() メソッドが呼び出されると正規イテレーターを返すため、Iterator.from(obj) は同じイテレーターを返します。
const iterator = (function* () {
yield 1;
yield 2;
yield 3;
})();
const obj = {
[Symbol.iterator]() {
return iterator;
},
};
const iterator2 = Iterator.from(obj);
console.log(iterator2 === iterator); // true
obj2 は反復可能オブジェクトであり、その [Symbol.iterator]() メソッドが呼ばれると、正規のイテレーターではないものを返すため、Iterator.from(obj2) は元のイテレーターをラップする新しいイテレーターを返します。
const iterator = {
current: 0,
next() {
return { value: this.current++, done: false };
},
};
const obj2 = {
[Symbol.iterator]() {
return iterator;
},
};
const iterator2 = Iterator.from(obj2);
console.log(iterator2 === iterator); // false
console.log(iterator2.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
イテレーターを正規イテレーターに変換
obj はすでに正規イテレーターであるため、Iterator.from(obj) は自分自身を返します。
const obj = (function* () {
yield 1;
yield 2;
yield 3;
})();
const iterator = Iterator.from(obj);
console.log(iterator === obj); // true
obj2 は非正規イテレーターであるため、Iterator.from(obj2) は元のイテレーターをラップする新しいイテレーターを返します。
const obj2 = {
current: 0,
next() {
return { value: this.current++, done: false };
},
};
const iterator = Iterator.from(obj2);
console.log(iterator === obj2); // false
console.log(iterator.next()); // { value: 0, done: false }
console.log(obj2.next()); // { value: 1, done: false }
仕様書
| 仕様書 |
|---|
| ECMAScript® 2027 Language Specification> # sec-iterator.from> |