Przechodzenie pętlą po obiekcie iteratora

Przechodzenie pętlą po obiekcie iteratora
S5
  • Rejestracja: dni
  • Ostatnio: dni
  • 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?

Xarviel
  • Rejestracja: dni
  • Ostatnio: dni
  • 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);
});

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.