Tablice - tematy dodatkowe

Dowiedzieliśmy się już, że możemy przemieszczać się po tablicy korzystając z klasycznej pętli for:

const tab = ["Marcin", "Monika", "Magda", "Piotrek", "Grześ", "Magda"];

for (let i=0; i<tab.length; i++) {
    const el = tab[i];
    console.log(el);
}

Można powiedzieć, że pętla for jest typowo "manualna". Trzeba ustawić licznik, kiedy ma się zakończyć i jak ma być zwiększany. Dodatkowo ręcznie trzeba się odwoływać do danego elementu w tablicy.

Funkcja forEach()

Funkcja forEach() służy do "automatycznego" przemieszczania się po tablicy. Przyjmuje ona jako parametr funkcję, w której możemy ustawić 3 parametry:

  • pierwszy parametr będzie wskazywał na dany element z tablicy,

  • drugi parametr będzie wskazywał na indeks elementu

  • trzeci będzie wskazywał na aktualną tablicę po której iterujemy

const tab = ["Marcin", "Monika", "Magda"];

//pod zmienną el trafią kolejne elementy
tab.forEach(el => {
    console.log(el.toUpperCase());
});

Poza pierwszym parametrem forEach() może przyjąć jeszcze drugi parametr, który służy do ustawiania this w jej wnętrzu. Gdy jako parametru używamy klasycznej funkcji, domyślnie wewnątrz forEach() (ale także i map, every, some, filter itp) zmienna this wskazuje na obiekt window:

Funkcje every() i some()

Metody every() i some() służą do sprawdzania czy wszystkie lub czy chociaż jeden element w tablicy spełnia dany warunek.

Obie funkcje w rezultacie zwracają true lub false.

Funkcja every() zwróci prawdę, kiedy przekazana w parametrze funkcja zwróci prawdę dla każdego elementu w tablicy.

Funkcja some() zwróci prawdę, jeżeli chociaż dla jednego elementu użyta funkcja zwróci prawdę.

Funkcja map()

Funkcja map() robi pętlę po tablicy i każdorazowo zwraca nowy element tablicy. W wyniku po zakończeniu całej pętli zwracana jest nowa tablica z taką samą liczbą elementów:

Funkcja filter()

Bardzo często będziemy chcieli przefiltrować daną tablicę zwracając tylko elementy, które pasują do danego warunku.

Funkcja filter() zwraca nową tablicę, która zawiera odfiltrowane elementy:

Funkcja reduce()

Dzięki reduce() możemy wykonywać operacje na tablicy "redukując ją", w wyniku uzyskując jakiś wynik.

Funkcja robi iterację po tablicy. W pierwszej iteracji pod pierwszy parametr wstawiany jest pierwszy element tablicy, a pod drugi kolejny. Funkcja zwraca jakiś wynik. W kolejnej iteracji podstawiany jest on pod pierwszy parametr, a do drugiego parametru trafia kolejny element w tablicy.

Kolejnym parametrem poza funkcją jest wartość początkowa:

Gdybyś sumował tablicę za pomocą zwykłej pętli, musiałbyś stworzyć dodatkowa zmienną:

Omawiany parametr to właśnie ta początkowa wartość.

Do reduce() trzeba się przyzwyczaić. Osobiście stosuję ją do kilku prostych sytuacji typu sumowanie, mnożenie itp. Ale gdy pojawia się coś bardziej skomplikowanego, sięgam po for of. Nawyk, wygoda? Ciężko powiedzieć. Zresztą nie tylko ja tak robię.

Funkcja find()

Metody indexOf(), lastIndexOf() i includes() są używane głównie do wyszukiwania typów prostych - liczb i tekstów.

Możemy za ich pomocą szukać także obiektów, musimy mieć jednak do nich referencję:

Dość często będzie zdarzać się sytuacja, gdzie będziemy chcieli wyszukać jakiś obiekt po jego właściwościach - np. po właściwości name, age czy każdej innej. W takim przypadku z pomocą przyjdą funkcje find(cb) oraz findIndex(cb).

Funkcja find(cb) zwraca pierwszy pasujący element, który spełnia dany warunek (przekazana funkcja zwrotna zwróci prawdę):

Jeżeli chcemy szukać od końca, skorzystamy z funkcji findLast():

Funkcja findIndex()

Funkcja findIndex() działa bardzo podobnie do powyższej, z tym, że zwraca indeks pierwszego pasującego elementu:

Jeżeli chcemy szukać od końca, skorzystamy z metody findLastIndex():

Łańcuchowe wywoływanie

Method chaining to sposób odpalania kolejnych funkcji, które zapisujemy po kropce. Technika ta tyczy się nie tylko tablic, ale całego JavaScript.

Odpalenie funkcji powoduje zwrócenie jakiś wartości. Jeżeli taka zwrócona wartość pasuje dla kolejnej funkcje, możemy tą funkcję od razu odpalić po kropce:

Podobnie jest z powyższymi funkcjami dotyczącymi tablic. Jeżeli dana funkcja zwraca tablicę (np. map() czy filter() zwracają tablicę) możemy od razu po kropce odpalać kolejne funkcje.

Powyższy przykład można jeszcze bardziej uprościć stosując zamiast funkcji anonimowych referencje do funkcji. Dzięki temu nie tylko nasz zapis się upraszcza, ale i zyskujemy dodatkowe funkcje dla przyszłego wykorzystania.

Last updated