The for-in loop. Nested loops. Eternal loop.
This topic is a continuation of the topic:
Contents
- 1. The for-in loop. Movement through objects
- 2. Nested loops
- 3. Eternal loop. Examples
- Related topics
Search other resources:
1. The for-in loop. Movement through objects
The for-in loop is used when it is necessary to iterate over a set of objects, which can be an array, a list, etc. The general form of using a for-in loop is as follows
for (var item in obj) { // Loop body // ... }
here
- item is a variable constituting the obj object. Such a component can be, for example, a property of an object. The item element receives a value in turn from the entire set of components of the obj object.
The for-in loop can be used to iterate over the elements of an array. In this case, the variable item gets the value of the array indexes. To directly access an array element, you need to use an index like
Array[item]
where Array – the name of array.
⇑
1.1. Example. Display all elements of the standard console object
// Loop for-in // Display all elements of the console object for (var t in console) { document.write(t + "<br>"); }
Result
debug error info log warn dir dirxml table trace group groupCollapsed groupEnd clear count countReset assert profile profileEnd time timeLog timeEnd timeStamp context memory
⇑
1.2. Display all elements of a user object
If you have developed your own (custom) object, then using the for-in loop, you can display all the elements of this object.
The example declares a Line class that describes a line on the coordinate plane. The following elements are declared in the class:
- x1, y1, x2, y2 – coordinates of line points;
- ShowLine() – a function that displays the current value of the line coordinates (the current state of the line);
- Length() is a function that returns the length of the line.
Program text in JavaScript
// Loop for-in // Task. Display all elements of an object of class Line. // 1. Declaring the Line class function Line(x1, y1, x2, y2) { this.x1 = x1 this.y1 = y1 this.x2 = x2 this.y2 = y2 // Function that prints the internal state of an object this.ShowLine = function() { document.write("x1 = " + this.x1 + ", y1 = " + this.y1 + "<br>"); document.write("x2 = " + this.x2 + ", y2 = " + this.y2 + "<br>"); } // A function that returns the length of a line this.Length = function() { var len = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) return len } } // 2. Create object ln1 var ln1 = new Line(2.5, 3.8, 1.4, -0.3); // 3. Demonstrate the methods of the ln1 object ln1.ShowLine() document.write("ln1.Length = " + ln1.Length() + "<br>") // 4. Display elements of ln1 object document.write("<br>Object ln1:<br>") for (var t in ln1) document.write(t + "<br>")
Result
x1 = 2.5, y1 = 3.8 x2 = 1.4, y2 = -0.3 ln1.Length = 4.244997055358225
Object ln1:
x1 y1 x2 y2 ShowLine Length
⇑
1.3. Retrieve all elements of an array
// Loop for-in // Task. Retrieve all elements of an array // 1. Array of strings var AS = [ "One", "Two", "Three" ]; // Loop for-in for (var t in AS) document.write(AS[t]+"<br>"); // 2. Array of numbers var AI = [ 2.5, 3.8, 1.4, -0.8, 2 ] document.write("Array AI: ") for (var t in AI) document.write(AI[t]+" ") document.write("<br>")
Result
One Two Three Array AI: 2.5 3.8 1.4 -0.8 2
⇑
2. Nested loops
Loops can be nested. This means that one loop can contain another loop in its body. The nested loop can be any loop: for, while, do-while, for-in. In turn, any nested loop in its body can also contain a loop statement. Thus, the cyclic process is abstracted into several levels of nesting. The number of nestings of any of the loop operators is not limited and is determined by the algorithm for solving the problem.
2.1. Example. Nested loops for, while. The output of the multiplication table
Task. Print a 9 multiplication table for the numbers 1 to 5.
Solution.
Below is a solution where the top loop is a for loop and the inner loop is a while loop.
// Nested loops // Outer loop for for (var i=1; i<=5; i++) { // Inner loop while var j = 1 while (j<=9) { document.write(i + " * " + j + " = " + i*j + "<br>"); j++; } }
⇑
2.2. Example. Nested loops while, do-while. Defining properties of sets of numbers
Task.
Find all numbers between 1 and 300 that have exactly five divisors. To solve use:
- while loop as an outer loop;
- do-while loop as inner loop.
Solution.
// Nested loops. // Find all numbers from 1 to 300 that have exactly 5 divisors. // Declare additional variables var num = 1 var n, t // Outer loop - numbers from 1 to 300 while (num <= 300) { n = 0 // number of divisors for num t = 1 // counter variable, needed to calculate the number of divisors do { // If t is a divisor of num, then increase the number of divisors if (num%t==0) n++; t++ } while (t <= num) // At the exit from the do-while loop in the variable n - the number of divisors of the number num if (n==5) document.write(num+"<br>"); num++ // Get the next number }
Result
16 81
⇑
2.3. Finding the number of occurrences of a given word in a text
Task. The text is set. Determine how many times the given fragment occurs in the text.
Solution.
In solving the problem, an outer do-while loop and an inner for loop were used.
// Nested loops // Search for a given word in the text // 1. Input text var text = prompt("Input string:") // 2. Enter the search word var word = prompt("Input word:") // 3. Declare additional variables var count = 0; // Number of words in the text var i, j var f_find // a flag that indicates the match of a word in the text i = 0 while (i<text.length) { // character-by-character text traversal // Accept that there is a match f_find = true for (j = 0; f_find && (j<word.length); j++) { // if a mismatch is found, exit the loop if (text[i+j]!=word[j]) f_find = false } // Checking how the loop will end if (f_find) // if there are no mismatches count++ // then increase counter i++ } // Display the result alert("Number of occurences = " + count)
⇑
3. Eternal loop. Examples
If loops are programmed incorrectly, it may happen that the end condition of the loop process will never occur. In this case, the loop will be performed indefinitely. Such a loop is called an eternal loop.
For while, for, do-while loops, an eternal loop will mean that the value of the conditional expression that determines the execution of the next iteration will always be true.
Some of the most common cases where an eternal loop occurs can be the following:
- incorrect increment of the counter, defined in the condition of the end of the loop process;
- no increment of the counter specified in the loop termination condition;
- erroneous determination of the result that determines the completion of the cyclic process;
- other cases.
Example.
// Eternal loop // 1. Loop while var i=0; while (i<5){ // there is no increment of the counter i in the loop document.write("i = " + i + "<br>") } // 2. Loop for for (var j=0; j<5; j--) { // counter j changes in the wrong direction document.write("j = " + j + "<br>") } // 3. Loop do-while do { } while (true) // stupid, but it's also an eternal loop
⇑
Related topics
⇑