Iterator.from()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Die statische Methode Iterator.from() erstellt ein neues Iterator-Objekt aus einem Iterator oder iterierbaren Objekt.

Syntax

js
from(object)

Parameter

object

Ein Objekt, das das iterable Protokoll oder das iterator Protokoll implementiert.

Rückgabewert

Wenn object ein iterierbares Objekt ist, wird seine Methode [Symbol.iterator]() aufgerufen, um den Iterator zu erhalten. Andernfalls wird angenommen, dass object ein Iterator ist. Wenn der Iterator bereits ein instanceof Iterator ist (was bedeutet, dass er Iterator.prototype in seiner Prototypkette hat), wird er direkt zurückgegeben. Andernfalls wird ein neues Iterator-Objekt erstellt, das den ursprünglichen Iterator umschließt.

Beschreibung

Diese Methode existiert, um benutzerdefinierte Iteratoren, die wahrscheinlich von Bibliotheken exportiert werden, in proper iterators umzuwandeln. Alle von Iterator.from() zurückgegebenen Iterator-Objekte erben von einem gemeinsamen Prototyp-Objekt, welches die folgenden Methoden hat:

next()

Ruft die next()-Methode des zugrunde liegenden Iterators auf und gibt das Ergebnis zurück.

return()

Ruft die return()-Methode des zugrunde liegenden Iterators auf und gibt das Ergebnis zurück oder gibt { value: undefined, done: true } zurück, wenn der zugrunde liegende Iterator keine return()-Methode hat.

Beispiele

Umwandlung eines iterierbaren Objekts in einen ordentlichen Iterator

Da obj bereits ein iterierbares Objekt ist, das einen ordentlichen Iterator zurückgibt, wenn seine [Symbol.iterator]()-Methode aufgerufen wird, gibt Iterator.from(obj) den gleichen Iterator zurück.

js
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

Da obj2 ein iterierbares Objekt ist, das einen nicht ordentlichen Iterator zurückgibt, wenn seine [Symbol.iterator]()-Methode aufgerufen wird, gibt Iterator.from(obj2) einen neuen Iterator zurück, der den ursprünglichen Iterator umschließt.

js
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 }

Umwandlung eines Iterators in einen ordentlichen Iterator

Da obj bereits ein ordentlicher Iterator ist, gibt Iterator.from(obj) sich selbst zurück.

js
const obj = (function* () {
  yield 1;
  yield 2;
  yield 3;
})();

const iterator = Iterator.from(obj);
console.log(iterator === obj); // true

Da obj2 ein nicht ordentlicher Iterator ist, gibt Iterator.from(obj2) einen neuen Iterator zurück, der den ursprünglichen Iterator umschließt.

js
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 }

Spezifikationen

Specification
Iterator Helpers
# sec-iterator.from

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch