Przetwarzanie powtórzeń w JavaScript
W tym artykule wyjaśnimy przetwarzanie powtórzeń w JavaScript.
YouTube Video
Instrukcja for
w JavaScript
Podstawowa składnia
1for (initialization; condition; update) {
2 // Code to repeat
3}
Instrukcja for
w JavaScript to składnia służąca do wykonywania iteracji. Wielokrotnie wykonuje określony blok kodu, dopóki spełniony jest określony warunek. Używając instrukcji for
, można efektywnie wykonywać ten sam proces wielokrotnie.
- Inicjalizacja (
initialization
): Część wykonywana tylko raz przed rozpoczęciem pętli. Inicjalizuj zmienne, takie jak licznik pętli. - Warunek (
condition
): Warunek określający, czy pętla ma być kontynuowana. Jeślitrue
, pętla jest kontynuowana; jeślifalse
, kończy się. - Aktualizacja (
update
): Wykonywana na końcu każdej iteracji pętli w celu zaktualizowania licznika.
Przykład
1for (let i = 0; i < 5; i++) {
2 console.log(i);
3}
W tym przypadku i
zaczyna się od 0
, a pętla działa, dopóki i < 5
jest true
. i++
zwiększa i
o 1 przy każdej iteracji pętli. W rezultacie wyświetlane są liczby od 0
do 4
.
Zakres licznika pętli
Deklaruj lub inicjalizuj zmienne w części inicjalizacyjnej instrukcji for
. Zmienne zadeklarowane tutaj są ważne tylko w obrębie pętli.
1for (let i = 0; i < 3; i++) {
2 console.log(i); // Outputs 0, 1, 2
3}
4console.log(i); // ReferenceError
- Jak pokazano w tym przykładzie, odwołanie się do zmiennej poza instrukcją
for
spowoduje błąd.
Pętla nieskończona
Ustawienie warunku, który nie kończy pętli, powoduje powstanie pętli nieskończonej. Może to obciążyć przeglądarkę lub system, dlatego należy zachować ostrożność.
1for (;;) {
2 console.log("Infinite loop");
3 break; // Exits the infinite loop with break
4}
Tablice i instrukcja for
Często używa się instrukcji for
w połączeniu z tablicami. Jest to wygodne do przetwarzania każdego elementu tablicy.
Przykład
1let fruits = ["apple", "banana", "cherry"];
2
3for (let i = 0; i < fruits.length; i++) {
4 console.log(fruits[i]);
5}
6// Outputs "apple", "banana", "cherry"
W ten sposób możesz przetwarzać każdy element tablicy za pomocą indeksów.
Inne Konstrukcje Pętli
Instrukcja for...of
Instrukcja for...of
jest używana dla obiektów iterowalnych, takich jak tablice i ciągi znaków.
1let fruits = ["apple", "banana", "cherry"];
2
3for (let fruit of fruits) {
4 console.log(fruit);
5}
6// Outputs "apple", "banana", "cherry"
Pozwala to przetwarzać każdy element bez użycia indeksów.
Instrukcja for...in
Instrukcja for...in
jest używana do iteracji po właściwościach obiektu.
1let person = { name: "John", age: 30, city: "Tokyo" };
2
3for (let key in person) {
4 console.log(key + ": " + person[key]);
5}
6// Outputs "name: John", "age: 30", "city: Tokyo"
W ten sposób możesz wykonywać operacje na każdym elemencie, używając kluczy.
Podsumowanie
- Instrukcja
for
to konstrukcja pętli składająca się z trzech części: inicjalizacji, warunku i aktualizacji. - Możesz kontrolować zachowanie pętli za pomocą instrukcji
break
lubcontinue
. - W połączeniu z tablicami lub obiektami elementy lub właściwości mogą być przetwarzane efektywnie.
Instrukcja while
w JavaScript
Podstawowa składnia
1while (condition) {
2 // Code that repeats while the condition is true
3}
Instrukcja while
w JavaScript to struktura pętli, która wykonuje powtarzające się operacje tak długo, jak podany warunek jest true
. Podobnie jak instrukcja for
, instrukcja while
określa tylko warunek.
- Warunek: Napisz wyrażenie warunkowe, które decyduje o kontynuacji pętli. Pętla trwa, dopóki warunek jest
true
, i kończy się, gdy stanie sięfalse
.
Przykład
1let i = 0;
2
3while (i < 5) {
4 console.log(i);
5 i++;
6}
7console.log(i); // 5
W tym przykładzie pętla rozpoczyna się od zmiennej i
ustawionej na 0
i działa tak długo, jak i < 5
jest true
. W każdej iteracji pętli i
jest zwiększane o 1, a gdy i
osiągnie 5
, warunek staje się false
i pętla się kończy. W wyniku działania instrukcji while
wyświetlane są wartości od 0
do 4
.
W przeciwieństwie do instrukcji for
, w instrukcji while
inicjalizacja i aktualizacja zmiennych są zapisywane jako osobne instrukcje. Możesz również odwołać się do zmiennej po instrukcji while
. W tym przypadku 5
jest wyświetlane po zakończeniu instrukcji while
.
Pętla nieskończona
Jeśli warunek jest zawsze true
, powstaje nieskończona pętla, która się nie kończy. Należy unikać nieskończonych pętli, ale jeśli są używane celowo, można zakończyć pętlę za pomocą instrukcji break
.
Przykład
1while (true) {
2 console.log("Infinite loop");
3 break; // Ends the loop with `break`
4}
Przetwarzanie tablic za pomocą pętli while
Możliwe jest również przetwarzanie tablic za pomocą instrukcji while
.
Przykład
1let fruits = ["apple", "banana", "cherry"];
2let i = 0;
3
4while (i < fruits.length) {
5 console.log(fruits[i]);
6 i++;
7}
8// Outputs "apple", "banana", "cherry"
Instrukcja do...while
Podstawowa składnia
1do {
2 // Code that is executed at least once
3} while (condition);
Instrukcja do...while
, będąca wariantem instrukcji while
, sprawdza warunek po wykonaniu pętli co najmniej raz. Podczas gdy instrukcja while
najpierw sprawdza warunek, instrukcja do...while
wykonuje proces raz przed weryfikacją warunku.
Przykład
1let i = 0;
2
3do {
4 console.log(i);
5 i++;
6} while (i < 5);
W tym przykładzie i
jest wyświetlane od 0
do 4
. Instrukcja do...while
różni się od instrukcji while
tym, że zawsze jest wykonana raz, nawet gdy warunek jest false
.
Podsumowanie
- Instrukcja
while
jest używana do wielokrotnego wykonywania kodu, dopóki warunek jesttrue
. - Należy uważać na nieskończone pętle, ale przepływ pętli można kontrolować za pomocą
break
icontinue
. - Instrukcja
do...while
jest przydatna, gdy chcesz wykonać pętlę co najmniej raz.
break
i continue
Możesz używać break
i continue
wewnątrz pętli.
break
jest używane do przedwczesnego zakończenia pętli.continue
pomija bieżącą iterację i przechodzi do następnej iteracji.
Przykład użycia break
1for (let i = 0; i < 10; i++) {
2 if (i === 5) {
3 break; // Exits the loop when i is 5
4 }
5 console.log(i);
6}
7// Outputs 0, 1, 2, 3, 4
8
9let i = 0;
10
11while (i < 10) {
12 if (i === 5) {
13 break; // Ends the loop when i is 5
14 }
15 console.log(i++);
16}
17// Outputs 0, 1, 2, 3, 4
W tym przypadku break
jest wykonywane, gdy i
osiąga wartość 5. W rezultacie wyświetlane są liczby od 0
do 4
.
Przykład użycia continue
1for (let i = 0; i < 5; i++) {
2 if (i === 2) {
3 continue; // Skips when i is 2
4 }
5 console.log(i);
6}
7// Outputs 0, 1, 3, 4
8
9let i = 0;
10while (i < 5) {
11 i++;
12 if (i === 3) {
13 continue; // Skips when i is 3
14 }
15 console.log(i);
16}
17// Outputs 1, 2, 4, 5
W tym przypadku continue
jest wykonywane, gdy i
ma wartość 2
. W rezultacie wyświetlane są liczby inne niż 2
.
Zagnieżdżone pętle w JavaScript
W programowaniu w JavaScript zagnieżdżona pętla to struktura, w której jedna pętla znajduje się wewnątrz innej. Takie pętle są bardzo skuteczne, gdy konkretne algorytmy lub procesy obejmują wiele wymiarów lub warstw. Na przykład przetwarzanie tablicy wielowymiarowej zawierającej tablice jest typowym przypadkiem.
Tutaj wyjaśnimy podstawową strukturę zagnieżdżonych pętli, przykłady użycia, środki ostrożności i kwestie optymalizacji.
Podstawowa struktura zagnieżdżonych pętli
Podstawowa struktura zagnieżdżonej pętli to forma, w której jedna lub więcej pętli znajduje się wewnątrz innej pętli. Za każdym razem, gdy pętla zewnętrzna wykona się jeden raz, pętla wewnętrzna wykonuje się tyle razy.
Poniżej znajduje się podstawowy przykład dwóch zagnieżdżonych pętli.
1for (let i = 0; i < 3; i++) {
2 console.log(`Outer loop iteration: ${i}`);
3
4 for (let j = 0; j < 2; j++) {
5 console.log(` Inner loop iteration: ${j}`);
6 }
7}
8// Output:
9// Outer loop iteration: 0
10// Inner loop iteration: 0
11// Inner loop iteration: 1
12// Outer loop iteration: 1
13// Inner loop iteration: 0
14// Inner loop iteration: 1
15// Outer loop iteration: 2
16// Inner loop iteration: 0
17// Inner loop iteration: 1
W powyższym kodzie i
jest liczone w pętli zewnętrznej, a j
jest liczone w pętli wewnętrznej. Za każdym razem, gdy pętla zewnętrzna wykona się jeden raz, pętla wewnętrzna wykonuje się dwa razy.
Praktyczny przykład zagnieżdżonych pętli
Zagnieżdżone pętle są szczególnie przydatne do obsługi tablic wielowymiarowych. Na przykład, podczas przetwarzania tablicy dwuwymiarowej musisz obsługiwać zarówno wiersze (pętla zewnętrzna), jak i kolumny (pętla wewnętrzna).
W poniższym przykładzie obsługujemy tablicę dwuwymiarową i drukujemy każdy jej element.
1const matrix = [
2 [1, 2, 3],
3 [4, 5, 6],
4 [7, 8, 9]
5];
6
7for (let row = 0; row < matrix.length; row++) {
8 for (let col = 0; col < matrix[row].length; col++) {
9 console.log(`Element at [${row}][${col}] is: ${matrix[row][col]}`);
10 }
11}
12// Output:
13// Element at [0][0] is: 1
14// Element at [0][1] is: 2
15// Element at [0][2] is: 3
16// Element at [1][0] is: 4
17// Element at [1][1] is: 5
18// Element at [1][2] is: 6
19// Element at [2][0] is: 7
20// Element at [2][1] is: 8
21// Element at [2][2] is: 9
W ten sposób, używając zagnieżdżonych pętli, uzyskujemy dostęp do każdego elementu tablicy dwuwymiarowej.
Notatki
Istnieją pewne kwestie, na które należy zwrócić uwagę podczas korzystania z zagnieżdżonych pętli.
-
Problemy z wydajnością
Wraz z większym zagłębieniem zagnieżdżonych pętli czas wykonania znacznie się wydłuża. Na przykład, jeśli pętla zewnętrzna wykonuje się 100 razy, a pętla wewnętrzna 100 razy, w sumie wykonywane jest 10 000 operacji. Dlatego jeśli mamy do czynienia z wieloma iteracjami pętli, należy rozważyć ich optymalizację w celu zwiększenia wydajności.
-
Zastosowanie w złożonych algorytmach
Zagnieżdżone pętle są bardzo potężne, ale w miarę wzrostu złożoności przetwarzania kod może stać się trudny do zrozumienia. Dlatego, aby zachować czytelność kodu, ważne jest odpowiednie uporządkowanie przetwarzania za pomocą komentarzy i funkcji.
Rozważania dotyczące optymalizacji
Podczas korzystania z zagnieżdżonych pętli można rozważyć następujące optymalizacje.
-
Wczesne zakończenie pętli
Jeśli wewnątrz pętli zostanie spełniony określony warunek, można użyć instrukcji
break
, aby zakończyć pętlę. Pozwoli to uniknąć niepotrzebnych pętli i poprawić wydajność.
1for (let i = 0; i < 5; i++) {
2 for (let j = 0; j < 5; j++) {
3 if (i + j > 5) {
4 break;
5 }
6 console.log(`i: ${i}, j: ${j}`);
7 }
8}
-
Przenoszenie obliczeń na zewnątrz
Zamiast wykonywać te same obliczenia wewnątrz pętli za każdym razem, można je przeprowadzić raz na zewnątrz pętli i użyć wyniku, aby proces był bardziej wydajny.
1let array = [1, 2, 3, 4, 5];
2
3// Inefficient example (calculating every time)
4for (let i = 0; i < array.length; i++) {
5 for (let j = 0; j < array.length; j++) {
6 let sum = array[i] + array[j];
7 console.log(sum);
8 }
9}
10
11// Efficient example (calculating outside)
12let arrayLength = array.length;
13for (let i = 0; i < arrayLength; i++) {
14 for (let j = 0; j < arrayLength; j++) {
15 let sum = array[i] + array[j];
16 console.log(sum);
17 }
18}
Podsumowanie
Zagnieżdżone pętle są bardzo przydatne w obsłudze złożonych struktur danych i algorytmów w JavaScript. Jednakże, jeśli nie są używane prawidłowo, mogą prowadzić do pogorszenia wydajności i zmniejszenia czytelności kodu. Aby efektywnie korzystać z zagnieżdżonych pętli, ważne jest dążenie do optymalizacji pętli i organizacji kodu oraz stosowanie odpowiednich podejść w zależności od sytuacji.
Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.