Iterator.from()
Базовая линия Недавно доступно
Эта функция работает на самых современных устройствах и версиях браузеров. Эта функция может не работать на старых устройствах или версиях браузеров. Она доступна во всех браузерах с марта 2025 года.
Статический метод Iterator.from() создает новый объект Iterator из объекта-итератора или итерируемого объекта.
Синтаксис
Iterator.from(object)
Параметры
-
object - Объект, реализующий протокол iterable или протокол iterator.
Возвращаемое значение
Если object является итерируемым объектом, вызывается его метод [Symbol.iterator]() для получения итератора. В противном случае предполагается, что object является итератором. Если итератор уже является instanceof Iterator (что означает, что он имеет Iterator.prototype в своей цепочке прототипов), он возвращается напрямую. В противном случае создается новый объект Iterator, который оборачивает исходный итератор.
Описание
Этот метод существует для преобразования пользовательских итераторов, вероятно, экспортируемых библиотеками, в надлежащие итераторы. Все объекты-итераторы, возвращаемые Iterator.from(), наследуются от общего объекта прототипа, который имеет следующие методы:
-
next() - Вызывает метод
next()нижележащего итератора и возвращает результат. -
return() - Вызывает метод
return()нижележащего итератора и возвращает результат, или возвращает{ value: undefined, done: true }, если у нижележащего итератора нет методаreturn().
Примеры
Преобразование итерируемого объекта в надлежащий итератор
Поскольку 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 }
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
from |
122
117–119
|
122
117–119
|
131 |
108
103–105
|
18.4 |
122
117–119
|
131 |
81
78–79
|
18.4 |
26.0
24.0–25.0
|
122
117–119
|
18.4 |
1.1.31 |
1.39 |
22.0.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator/from