Przechodzenie pętlą po obiekcie iteratora

Przechodzenie pętlą po obiekcie iteratora
S5
  • Rejestracja:około 4 lata
  • Ostatnio:około 2 lata
  • Postów:238
0

Chciałbym przejść pętlą po obiekcie iteratora stworzone na podstawie generatora.
Jak tak próbuje to jest ok:

Kopiuj
function* generator() {
  for (let i = 0; i < 10; i++) {
    yield i;
  }
}

const iterator = generator();

for (const item of iterator) {
  console.log(item);
}

Czemu natomiast nie mogę pętli for ... of zamienić na forEacha?:

Kopiuj
function* generator() {
  for (let i = 0; i < 10; i++) {
    yield i;
  }
}

const iterator = generator();

iterator.forEach((item) => console.log(item))

Dostaje komunikat: Uncaught TypeError: iterator.forEach is not a function

Czy ten iterator po prostu nie implementuje pętli forEach?

edytowany 1x, ostatnio: cerrato
Gouda105
  • Rejestracja:prawie 8 lat
  • Ostatnio:około 2 miesiące
  • Postów:487
Xarviel
  • Rejestracja:ponad 3 lata
  • Ostatnio:około 11 godzin
  • Postów:847
0

Jeśli jest nam mocno potrzebna taka funkcjonalność to zawsze możemy napisać własną implementacje forEach, ale nie polecałbym takiego podejścia.

Kopiuj
function* generator() {
  for (let i = 0; i < 10; i++) {
    yield i;
  }
}

/* Tutaj moja upośledzona implementacja, która po prostu wywołuje "for of" pod spodem :D */
generator.prototype.forEach = function(callback) { 
  for (const el of generator()) {
    callback(el);    
  }
}

const iterator = generator();

iterator.forEach((item) => {
  console.log(item);
});
edytowany 2x, ostatnio: Xarviel

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.