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 einem iterierbaren Objekt.
Syntax
from(object)
Parameter
object
-
Ein Objekt, das das iterierbare Protokoll oder das Iterator-Protokoll implementiert.
Rückgabewert
Wenn object
ein iterierbares Objekt ist, wird seine [Symbol.iterator]()
-Methode aufgerufen, um den Iterator zu erhalten. Andernfalls wird angenommen, dass object
ein Iterator ist. Ist der Iterator bereits ein instanceof
Iterator
(was bedeutet, dass er Iterator.prototype
in seiner Prototyp-Kette 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 ordnungsgemäße Iteratoren umzuwandeln. Alle von Iterator.from()
zurückgegebenen Iteratorobjekte erben von einem gemeinsamen Prototypobjekt, das die folgenden Methoden besitzt:
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 keinereturn()
-Methode hat.
Beispiele
Umwandlung eines iterierbaren Objekts in einen ordnungsgemäßen Iterator
Da obj
bereits ein iterierbares Objekt ist, das einen ordnungsgemäßen Iterator zurückgibt, wenn seine [Symbol.iterator]()
-Methode aufgerufen wird, 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, das einen nicht ordnungsgemäßen 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.
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 ordnungsgemäßen Iterator
Da obj
bereits ein ordnungsgemäßer Iterator ist, gibt Iterator.from(obj)
sich 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 ordnungsgemäßer 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
Specification |
---|
Iterator Helpers # sec-iterator.from |
Browser-Kompatibilität
BCD tables only load in the browser