A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Iterator/from below:

Iterator.from() - JavaScript | MDN

Iterator.from()

Baseline 2025

Newly available

Iterator.from() は静的メソッドで、イテレーターや反復可能オブジェクトから新しい Iterator オブジェクトを作成します。

構文 引数
object

反復可能プロトコルまたはイテレータープロトコルを実装したオブジェクトです。

返値

object が反復可能オブジェクトである場合、そのオブジェクトの [Symbol.iterator]() メソッドが呼び出され、イテレーターが取得されます。 それ以外の場合は、 object がイテレーターであると見なされます。 イテレーターがすでに instanceof Iterator である場合(つまり、そのプロトタイプチェーンに Iterator.prototype がある場合)は、直接返されます。 それ以外の場合は、元のイテレーターをラップする新しい Iterator オブジェクトが作成されます。

解説

このメソッドは、おそらくライブラリーからエクスポートされた独自のイテレーターを正規イテレーターに変換するために存在します。 Iterator.from() が返すイテレーターオブジェクトはすべて、共通のプロトタイプオブジェクトを継承しており、このプロトタイプには次のメソッドが備わっています。

next()

基礎となるイテレーターの next() メソッドを呼び出し、結果を返します。

return()

基礎となるイテレーターの return() メソッドを呼び出し、その結果を返します。または、基礎となるイテレーターに return() メソッドがなければ、{ value: undefined, done: true } を返します。

例 反復可能オブジェクトを正規イテレーターに変換

すでに 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 }
仕様書 ブラウザーの互換性 関連情報

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4