Poznajemy trzy podobne do siebie pętle – for…of, for…in oraz forEach. Zakładam, że znamy już te podstawowe pętle w JS (for, while, może do-while) zaś forEach, for…of i for…in albo nie znamy, albo mylą nam się ze sobą niesamowicie i staramy się ich unikać.

Po przeczytaniu tego artykułu powinniśmy nabrać wreszcie pewnej jasności czym są te pętle i kiedy ich używać.

JS posiada ogromną ilość różnych pętli, które możemy zastosować na tablicach.

Pętla for…of przechodzi przez każdy element tablicy:

<script>
        const array1 = ['a', 'b', 'c'];
        for (const element of array1) {
        console.log(element);
        }
        //a
        //b
        //c
    </script>

Pętla for…in przechodzi po każdym indeksie tablicy:

<script>
        const array1 = ['a', 'b', 'c'];
        for (const idx in array1) {
        console.log(idx);
        }
        //0
        //1
        //2
    </script>

Jeżeli trudno nam to wszystko zapamiętać – skojarzmy sobie 'in’ z 'INDEKSEM’ w głowie – powinno pomóc.

Oczywiście „po indeksie” możemy te elementy „złapać”:

<script>
        const array1 = ['a', 'b', 'c'];
        for (const idx in array1) {
        console.log(array1[idx]);
        }
        //a
        //b
        //c
    </script>

Pętla/metoda forEach pozwala nam wywołać jakąś funkcję na każdym elemencie tablicy:

<script>
        const array1 = ['a', 'b', 'c'];
        array1.forEach((el) => {
        console.log(el.toUpperCase());
        });
        //A
        //B
        //C
    </script>

Używając forEach możemy uzyskać dostęp i do elementów i do ich indeksów:

<script>
        const array1 = ['a', 'b', 'c'];
        array1.forEach((el, idx) => {
        console.log(el, idx);
        });
        //a 0
        //b 1
        //c 2
    </script>

Możemy nawet uzyskać dostęp do elementów, indeksów i całej tablicy:

<script>
        const array1 = ['a', 'b', 'c'];
        array1.forEach((el, idx, arr) => {
        console.log(el, idx, arr);
        });
        //a 0 ['a', 'b', 'c']
        //b 1 ['a', 'b', 'c']
        //c 2 ['a', 'b', 'c']
    </script>

Pętla for…in przydaje się zaś do iterowania po obiektach. W przypadku tablic zwracała indeksy, zaś w przypadku obiektów zwraca ich klucze:

<script>
        let person = {
        name: "John",
        age: 20
        }
        for(const key in person) {
          console.log(key, person[key]);
        }
        //name John
        //age 20
    </script>

A w czym może „błyszczeć” for…of? Cóż, forEach to metoda tablic, zaś for…of pozwala iterować po wszystkich obiektach tablicopodobnych, na przykład po zbiorach:

const iterable = new Set([1, 1, 2, 2, 3, 3]);

for (const value of iterable) {
  console.log(value);
}
// 1
// 2
// 3

Podsumowanie

  • forEach to metoda tablicy
  • forEach wykonuje callback (funkcję) na każdym elemencie tablicy
  • callback może przyjąć argumenty: element, element oraz indeks, element oraz indeks i cała tablica
  • for…of iteruje po elementach tablic oraz obiektów tablico-podobnych, co jest ogromną zaletą tej pętli
  • for…in iteruje po indeksach tablic oraz kluczach obiektów (i to jest jej ogromna zaleta).

Zazwyczaj do przechodzenia po tablicach używamy forEach. Do obiektów tablico-podobnych – for…of. Do przechodzenia po obiektach (tj. ich kluczach i wartościach, które po kluczu możemy uzyskać) – for…in.