Pętal for-of i forEach w JavaScript: Szybki Kurs #39
Różnice między pętlą for-of a metodą forEach w JavaScript.
Spis treści
O dostępnych pętlach w JavaScript jest oddzielny dział w tym kursie. Jednak same obiekty Array mają w swoim prototypie kilka metod, które również służą do iterowania po tablicach. Mamy zawsze wybór użycia normalnej pętli lub też wbudowanej metody w obiekty Array.
W tym przypadku sprawdzimy, jaka jest różnica między nowszą pętlą for-of , a metodąforEach.
Pętla for-of
Konstrukcję for-of już powinniśmy znać:
const arr1 = ['a', 'b', 'c'];
for (const value of arr1) {
console.log(value); // 'a', 'b', 'c'
}
Ma bardzo czytelny zapis i świetnie może nam zastąpić starą i wysłużoną pętlę for o ile nie potrzebujemy na przykład indeksu tablicy. Ta pętla pobiera tylko i wyłącznie wartości. Dlatego, jeżeli oprócz wartości potrzebujemy indeksu, albo użyjemy innej pętli, albo metody indexOf.
Pętla for-of pozwala także na wykonanie instrukcji break:
for (const value of arr1) {
if (value === 'b') {
break;
}
console.log(value); // 'a'
}
Instrukcja break może być bardzo przydatna. Gdy stwierdzimy, że chcemy zakończyć pętlę, to mamy tą instrukcję do dyspozycji w pętli for-of i innych pętlach w JavaScript.
Jest także instrukcja continue:
for (const value of arr1) {
if (value === 'b') {
continue;
}
console.log(value); // 'a', 'c'
}
Również przydatna instrukcja, gdy chcemy pominąć jakaś wartość i jej nie procesować. Ta instrukcja także dostępna jest w pętlach JavaScript.
Metoda forEach
Tablice w JavaScript mają dodatkowo do dyspozycji swoją metodę forEach, która jest w pewnym sensie odpowiednikiem pętli:
const arr2 = ['a', 'b', 'c'];
arr2.forEach(value => console.log(value)); // 'a', 'b', 'c'
Pamiętajmy jednak, że jest to metoda, która wywoływana jest na tablicach. Metoda ta przyjmuje funkcję callback, która przekazana do forEach otrzymuje każdy element z tablicy.
W metodzie forEach nie możemy wykonać instrukcji break, continue, ani return. Te instrukcje są pomijane i nie są wykonywane, nawet jeżeli użyjemy ich w pętli forEach. I to jest główna różnica w porównaniu do zwykłych pętli, metody forEach nie możemy przerwać.
arr2.forEach((value, index, array) => {
console.log(index, value); // 0 'a', 1 'b', 2 'c'
});
Metoda forEach w przekazanej funkcji callBack może przyjąć dodatkowe parametry, z metody forEach możemy otrzymać index tablicy, a także całą tablicę, po której aktualnie iterujemy. Indeks jak najbardziej może się przydać, tablica jako parametr jest rzadko używana.
Mamy więc pewne różnice w działaniu, jeśli chodzi o tradycyjne pętle i metodę forEach. Wspomnę jeszcze, że metoda foreEach jest dużo wolniejsza od for-of jeżeli komuś zależy na optymalizacjach.
Często też porównuje się metodę forEach do metody map. Metoda forEach powinna być używana do przetwarzania elementów, które otrzymujemy w trakcie iteracji. Element taki możemy na przykład wysłać do bazy danych, zalogować w systemie. Wykorzystujmy metodę forEach gdy chcemy zrobić coś
konkretnego ze wszystkimi elementami listy. Pamiętajmy, że metoda ta zawsze iteruje po wszystkich elementach i nie da się jej przerwać. Pobieramy więc każdy element i procesujemy go w jakiś sposób.
Nie należy używać metody do zmiany danych w liście czy też zmiany samej listy. Do tego są lepsze metody jak map. Stawiając takie rozgraniczenie, nasz kod będzie czytelniejszy.
Niewątpliwie pętla forEach jest bardzo czytelną pętlą i często używaną w kodzie JavaScript. Świetnie sprawdza się przy wykonywaniu podstawowych operacji z elementami tablicy.
Co warto zapamiętać
- do iterowania po tablicach mamy metody z obiektu
Arrayi pętle jakfor-of - metoda
forEachjest podobna do pętli, ale posiada swoje braki, nie ma instrukcjibreakorazcontinue - metodę
forEachnajlepiej używać do procesowania elementów z tablicy - pętli
forEachnie używamy do zmiany elementów czy zmiany tablicy - pętla
forEachjest wolniejsza niż pętlafor-of