Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Iterator.from()

Baseline 2025
Neu verfügbar

Seit März 2025 funktioniert diese Funktion auf aktuellen Geräten und in aktuellen Browserversionen. Auf älteren Geräten oder in älteren Browsern funktioniert sie möglicherweise nicht.

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

Syntax

js
Iterator.from(object)

Parameter

object

Ein Objekt, das das Iterable-Protokoll oder das Iterator-Protokoll implementiert.

Rückgabewert

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

Beschreibung

Diese Methode dient dazu, benutzerdefinierte Iteratoren, beispielsweise aus Bibliotheken, in reguläre Iteratoren umzuwandeln. Alle von Iterator.from() zurückgegebenen Iterator-Objekte erben von einem gemeinsamen Prototypobjekt mit den folgenden Methoden:

next()

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

return()

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

Beispiele

Ein iterierbares Objekt in einen regulären Iterator umwandeln

Da obj bereits ein iterierbares Objekt ist, dessen Methode [Symbol.iterator]() einen regulären Iterator zurückgibt, gibt Iterator.from(obj) denselben 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, dessen Methode [Symbol.iterator]() einen nicht regulären Iterator zurückgibt, 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 }

Einen Iterator in einen regulären Iterator umwandeln

Da obj bereits ein regulärer Iterator ist, gibt Iterator.from(obj) ihn 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 regulärer 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

Spezifikation
ECMAScript® 2027 Language Specification
# sec-iterator.from

Browser-Kompatibilität

Siehe auch