TypeScript Repetition Statements
This article explains the repetition statements in TypeScript.
YouTube Video
The for statement in TypeScript
The for statement in TypeScript is a basic loop structure for performing repeated operations. In a for loop, the same block of code can be repeatedly executed based on a specified number of times or conditions.
Basic Syntax
1for (initialization; condition; update) {
2 // Code to execute repeatedly while the condition is true
3}- Initialization (
initialization): The part that is executed only once before starting the loop. Initialize variables such as the loop counter. - Condition (
condition): The condition that determines whether to continue the loop. Iftrue, the loop continues; iffalse, it ends. - Update (
update): This is executed at the end of each loop to update the loop counter.
Example 1: Basic for loop
In the example below, it outputs the numbers from 0 to 4 in order.
1for (let i = 0; i < 5; i++) {
2 console.log("The value of i is: " + i);
3}
4// Outputs:
5// The value of i is: 0
6// The value of i is: 1
7// The value of i is: 2
8// The value of i is: 3
9// The value of i is: 4
Example 2: for loop with an array
You can also use a for loop to process the elements of an array in order.
1let fruits: string[] = ["apple", "banana", "cherry"];
2
3for (let i = 0; i < fruits.length; i++) {
4 console.log("Fruit: " + fruits[i]);
5}
6// Outputs:
7// Fruit: apple
8// Fruit: banana
9// Fruit: cherry
Example 3: for-in loop
The for-in loop is used to iterate over the properties of an object or the indices of an array in order.
1let car = { brand: "Toyota", model: "Corolla", year: 2020 };
2
3for (let key in car) {
4 console.log(key + ": " + car[key]);
5}
6// Outputs:
7// brand: Toyota
8// model: Corolla
9// year: 2020
Example 4: for-of loop
The for-of loop is used to get each element's value in order from iterable objects such as arrays or strings.
1let colors: string[] = ["red", "green", "blue"];
2
3for (let color of colors) {
4 console.log("Color: " + color);
5}
6// Outputs:
7// Color: red
8// Color: green
9// Color: blue
Example 5: Nested for Loop
It is also possible to use a for loop within another for loop, known as a nested loop. This allows you to create double loops, among other things.
1for (let i = 0; i < 3; i++) {
2 console.log("Outer loop i: " + i);
3 for (let j = 0; j < 2; j++) {
4 console.log(" Inner loop j: " + j);
5 }
6}
7// Outputs:
8// Outer loop i: 0
9// Inner loop j: 0
10// Inner loop j: 1
11// Outer loop i: 1
12// Inner loop j: 0
13// Inner loop j: 1
14// Outer loop i: 2
15// Inner loop j: 0
16// Inner loop j: 1
Summary
- The
forstatement performs repetitive processing based on specified counts or conditions. for-inis used to retrieve the properties of an object or the indexes of an array.for-ofretrieves the values of elements from iterable objects like arrays.- Complex repetitive processing is also possible with nested
forloops.
The for statement in TypeScript provides powerful and flexible repetitive processing, similar to other loops.
While Statements in TypeScript
In TypeScript, a while statement is a loop construct that executes a repetitive process while the specified condition is true. Similar to the for loop, the while loop is suitable for cases where the number of iterations is not predetermined, or when you want to control repetition based on a condition.
Basic Syntax
1while (condition) {
2 // Code to execute repeatedly while the condition is true
3}- Condition: The condition under which the loop executes. The loop continues as long as this condition is
true, and stops when it becomesfalse.
Example 1: Basic while Loop
In the example below, it continues to output the value of i while i is less than 5.
1let i: number = 0;
2
3while (i < 5) {
4 console.log("The value of i is: " + i);
5 i++;
6}
7// Outputs:
8// The value of i is: 0
9// The value of i is: 1
10// The value of i is: 2
11// The value of i is: 3
12// The value of i is: 4
In this example, the loop ends when i becomes 5 or greater because the condition becomes false.
Example 2: Infinite Loop Example
If the condition in a while loop is always true, it can become an infinite loop. This usually causes the program to fail to stop as intended, so caution is needed.
1let x: number = 0;
2
3while (true) {
4 console.log("The value of x is: " + x);
5 x++;
6 if (x >= 5) {
7 break; // Exit the loop when the condition is met
8 }
9}
10// Outputs:
11// The value of x is: 0
12// The value of x is: 1
13// The value of x is: 2
14// The value of x is: 3
15// The value of x is: 4
You can use the break statement to forcibly exit the loop when a condition is met.
Example 3: do-while Loop
The do-while loop is a structure where the loop process is executed at least once. Since the condition is evaluated after the process, the process runs at least once even if the condition is false.
1let j: number = 5;
2
3do {
4 console.log("The value of j is: " + j);
5 j++;
6} while (j < 5);
7// Outputs: The value of j is: 5
In this example, j is 5 from the start, and j < 5 is false, but in a do-while loop, it runs at least once regardless of the condition.
Summary
- A
whileloop repeats processing as long as the condition istrue. - If the loop termination condition is unclear, you need to be careful of infinite loops.
- A
do-whileloop differs from a normalwhileloop in that the processing is executed at least once.
The while statement in TypeScript is useful for loop processing with uncertain iteration counts or when dynamic condition checking is necessary.
break and continue
You can use break and continue within loops.
breakis used to terminate a loop prematurely.continueis used to skip the current iteration and move to the next iteration.
Example of 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;
10while (i < 10) {
11 if (i === 5) {
12 break; // Ends the loop when i is 5
13 }
14 console.log(i);
15 i++;
16}
17// Outputs 0, 1, 2, 3, 4
In this case, break is executed when i becomes 5. As a result, numbers from 0 to 4 are displayed.
Example of 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 if (i === 2) {
12 i++;
13 continue; // Skips when i is 2
14 }
15 console.log(i);
16 i++;
17}
18// Outputs 0, 1, 3, 4
In this case, continue is executed when i is 2. As a result, numbers except 2 are displayed.
Nested loops in TypeScript
A nested loop is a structure where a loop is used inside another loop. In TypeScript, loop constructs such as for, while, and do-while are supported. By using nested loops, you can process two-dimensional arrays (matrices) and streamline processing based on multiple conditions.
Basic Syntax
The basic syntax of a nested loop is as follows.
1for (let i: number = 0; i < n; i++) {
2 for (let j: number = 0; j < m; j++) {
3 // Processing for the inner loop
4 }
5}For each execution of the outer loop, the inner loop completes all its iterations. This structure is very useful when handling multiple loops or data structures.
Example of a nested loop in TypeScript
Traversing a two-dimensional array
Nested loops are often used when manipulating multidimensional data structures like two-dimensional arrays. In the following example, elements of a two-dimensional array are traversed, and their values are displayed on the console.
1const matrix: number[][] = [
2 [1, 2, 3],
3 [4, 5, 6],
4 [7, 8, 9]
5];
6
7for (let row: number = 0; row < matrix.length; row++) {
8 for (let col: number = 0; col < matrix[row].length; col++) {
9 console.log(`matrix[${row}][${col}] = ${matrix[row][col]}`);
10 }
11}
12// Output
13// matrix[0][0] = 1
14// matrix[0][1] = 2
15// matrix[0][2] = 3
16// matrix[1][0] = 4
17// matrix[1][1] = 5
18// matrix[1][2] = 6
19// matrix[2][0] = 7
20// matrix[2][1] = 8
21// matrix[2][2] = 9
In this example, we are traversing the two-dimensional array matrix. The outer loop handles the rows, and the inner loop handles the columns, displaying each element in order.
Combination of two arrays
Next, we introduce an example of calculating all combinations of two arrays. For instance, you can take one element from each of two arrays and output all possible pairs.
1const array1: string[] = ['A', 'B', 'C'];
2const array2: number[] = [1, 2, 3];
3
4for (let i: number = 0; i < array1.length; i++) {
5 for (let j: number = 0; j < array2.length; j++) {
6 console.log(`Pair: (${array1[i]}, ${array2[j]})`);
7 }
8}
9// Output
10// Pair: (A, 1)
11// Pair: (A, 2)
12// Pair: (A, 3)
13// Pair: (B, 1)
14// Pair: (B, 2)
15// Pair: (B, 3)
16// Pair: (C, 1)
17// Pair: (C, 2)
18// Pair: (C, 3)
In this example, all pairs between the string array array1 and the number array array2 are created. The outer loop extracts elements from array1, and the inner loop extracts elements from array2, displaying each pair.
Generating coordinates with a triple loop
By using triple nested loops, you can generate coordinates in a three-dimensional space, for example.
1for (let x: number = 0; x < 3; x++) {
2 for (let y: number = 0; y < 3; y++) {
3 for (let z: number = 0; z < 3; z++) {
4 console.log(`Coordinate: (${x}, ${y}, ${z})`);
5 }
6 }
7}
8// Output
9// Coordinate: (0, 0, 0)
10// Coordinate: (0, 0, 1)
11// Coordinate: (0, 0, 2)
12// ...
13// Coordinate: (2, 2, 1)
14// Coordinate: (2, 2, 2)
In this way, using triple nested loops allows you to easily generate coordinates in a three-dimensional space.
Performance of nested loops
Nested loops are convenient, but the computational cost increases rapidly as the depth of loops increases. For example, if there are n iterations of the outer loop and m iterations of the inner loop, the total number of iterations will be n * m. When this becomes further nested, the computational complexity increases exponentially, potentially affecting program performance.
Below are the computational complexities when traversing three arrays.
1const array1: number[] = [1, 2, 3];
2const array2: number[] = [4, 5, 6];
3const array3: number[] = [7, 8, 9];
4
5for (let i: number = 0; i < array1.length; i++) {
6 for (let j: number = 0; j < array2.length; j++) {
7 for (let k: number = 0; k < array3.length; k++) {
8 console.log(`Combination: (${array1[i]}, ${array2[j]}, ${array3[k]})`);
9 }
10 }
11}In this case, the loop runs a number of times equal to the product of the lengths of array1, array2, and array3, resulting in a total of 27 iterations to process all combinations.
Optimization of nested loops
When using nested loops, you can improve performance by considering the following optimizations.
- Introduce early returns: Exit the loop early when the goal is achieved to avoid unnecessary iterations.
- Cache loop variables: Pre-cache the values of variables used within the loop (especially lengths and ranges) to reduce the cost of computation each time.
- Change data structures: Revising the structure of arrays and objects can be effective in speeding up specific repetitive processes.
Conclusion
Nested loops are a powerful tool in complex data processing and algorithms. However, as loop depth and the number of iterations increase, performance issues may arise. With appropriate optimizations and careful design, you can effectively leverage nested loops in TypeScript.
You can follow along with the above article using Visual Studio Code on our YouTube channel. Please also check out the YouTube channel.