Iterator.from()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Iterator.from()
は静的メソッドで、イテレーターや反復可能オブジェクトから新しい 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 }
仕様書
Specification |
---|
Iterator Helpers # sec-iterator.from |
ブラウザーの互換性
BCD tables only load in the browser