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
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 Methodereturn()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.
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.
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.
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.
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> |