Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Iterator : méthode statique from()

Baseline 2025
Newly available

Depuis March 2025, cette fonctionnalité fonctionne sur les appareils et les versions de navigateur les plus récents. Elle peut ne pas fonctionner sur les appareils ou navigateurs plus anciens.

La méthode statique Iterator.from() crée un nouvel objet Iterator à partir d'un itérateur ou d'un objet itérable.

Syntaxe

js
Iterator.from(object)

Paramètres

object

Un objet qui implémente le protocole itérable ou le protocole itérateur.

Valeur de retour

Si object est un itérable, sa méthode [Symbol.iterator]() est appelée pour obtenir l'itérateur. Sinon, object est supposé être un itérateur. Si l'itérateur est déjà instanceof Iterator (ce qui signifie qu'il a Iterator.prototype dans sa chaîne de prototypes), il est retourné directement. Sinon, un nouvel objet Iterator est créé pour envelopper l'itérateur original.

Description

Cette méthode existe pour convertir des itérateurs personnalisés, probablement exportés par des bibliothèques, en itérateurs appropriés. Tous les objets itérateurs retournés par Iterator.from() héritent d'un objet prototype commun, qui possède les méthodes suivantes :

next()

Appelle la méthode next() de l'itérateur sous-jacent et retourne le résultat.

return()

Appelle la méthode return() de l'itérateur sous-jacent et retourne le résultat, ou retourne { value: undefined, done: true } si l'itérateur sous-jacent n'a pas de méthode return().

Exemples

Convertir un itérable en itérateur approprié

Parce que obj est déjà un itérable qui retourne un itérateur approprié lorsque sa méthode [Symbol.iterator]() est appelée, Iterator.from(obj) retourne le même itérateur.

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

Parce que obj2 est un itérable qui retourne un itérateur non approprié lorsque sa méthode [Symbol.iterator]() est appelée, Iterator.from(obj2) retourne un nouvel itérateur qui enveloppe l'itérateur original.

js
const iterator = {
  actuel: 0,
  next() {
    return { valeur: this.actuel++, fait: false };
  },
};

const obj2 = {
  [Symbol.iterator]() {
    return iterator;
  },
};

const iterator2 = Iterator.from(obj2);
console.log(iterator2 === iterator); // false
console.log(iterator2.next()); // { valeur: 0, fait: false }
console.log(iterator.next()); // { valeur: 1, fait: false }

Convertir un itérateur en itérateur approprié

Parce que obj est déjà un itérateur approprié, Iterator.from(obj) se retourne lui-même.

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

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

Parce que obj2 est un itérateur non approprié, Iterator.from(obj2) retourne un nouvel itérateur qui enveloppe l'itérateur original.

js
const obj2 = {
  actuel: 0,
  next() {
    return { valeur: this.actuel++, fait: false };
  },
};

const iterator = Iterator.from(obj2);
console.log(iterator === obj2); // false
console.log(iterator.next()); // { valeur: 0, fait: false }
console.log(obj2.next()); // { valeur: 1, fait: false }

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-iterator.from

Compatibilité des navigateurs

Voir aussi