Wbijanie gwoździ śrubokrętem – czyli o pętlach w JavaScript
Tym razem pomówimy o funkcji, która jest niezastąpiona jeżeli pracuje się z tablicami. Załóżmy że mamy akademickie wręcz zadanie – napisanie funkcji sprawdzającej czy w danej tablicy znajduje się przynajmniej jedna liczba parzysta. Na potrzeby przykładu, utworzymy sobie tablicę zmiennych, w których tylko jedna wartość będzie parzysta.
Poniższy przykład robimy używając klasycznej pętli for. Musimy tutaj sami tworzyć tutaj indeks a następnie odnosić się do wartości w tablicy. Gdy tylko znajdziemy wartość, która jest prawdziwa, przerywamy pętlę używając break
const numbers = [1, 3, 5, 6, 9];
const isEven = (number) => number % 2 === 0;
let hasEvenNumber = false;
for (let i = 0; i < numbers.length; i++) {
if (isEven(numbers[i])) {
hasEvenNumber = true;
break;
}
}
console.log(hasEvenNumber); // Output: true
Możemy również uzyskać podobny efekt, używając for each – tutaj nie musimy tworzyć zmiennej i
, ponieważ przechodzimy po wszystkich wartościach. Dalej jednak nie mamy tutaj idealnego rozwiązania – pętla forEach nie umożliwia zastosowania słowa kluczowego break
, z tego powodu pętla wykonuje się dla wszystkich elementów, bez możliwości przerwania.
const numbers = [1, 3, 5, 6, 9];
const isEven = (number) => number % 2 === 0;
let hasEvenNumber = false;
numbers.forEach((number) => {
if (isEven(number)) {
hasEvenNumber = true;
}
});
console.log(hasEvenNumber); // Output: true
Poszukajmy więc dalej, skoro nie for i nie for each to czy JavaScript umożliwia nam zrobienie tego w prosty i przyjemny sposób? Owszem, wraz z wprowadzeniem ECMAScript 5 (ES5) otrzymaliśmy zestaw przydatnych do codziennej pracy funkcji. Stąd też mamy metodę dla tablic, o nazwie some
() – wykonuje się ona dla wszystkich elementów w tablicy, do momentu gdy któryś z nich, w callbacku nie zwróci `true`.
const numbers = [1, 3, 5, 6, 9];
const isEven = (number) => number % 2 === 0;
const hasEvenNumber = numbers.some(isEven);
console.log(hasEvenNumber); // Output: true
Uzyskaliśmy więc ten sam efekt, pisząc znacznie mniej kodu i zyskując na czytelności, jaki więc wniosek?
Funkcja `some()` jest przydatnym narzędziem w języku JavaScript, jednak to nie jedyna rzecz, którą warto poznać. ES5 zrewolucjonizowało pracę w języku JavaScript – nawet biorąc pod uwagę samą funkcję, które zostały udostępnione. Warto więc zapoznać się z istniejącymi już rozwiązaniami, i nie zaciągać paczek do każdego problemu, skoro sam język, oferuje nam rozwiązania godne uwagi.
Dodaj komentarz