While Loops
var myArr = [];
var i = 0;
while(i < 5) {
myArr.push(i);
i++;
}
For Loops
var myArr = [];
// for ([initialization]; [condition]; [final-expression])
for (var i = 0; i < 5; i++) {
myArr.push(i);
}
Iterate through an Array with a For Loop
var myArr = [ 2, 3, 4, 5, 6];
var total = 0;
for (var i = 0; i < myArr.length; i++) {
total += myArr[i];
}
Nesting For Loops
var myArr = [
[1,2], [3,4], [5,6]
];
for (var i=0; i < myArr.length; i++) {
for (var j=0; j < myArr[i].length; j++) {
console.log(myArr[i][j]);
}
}
For…In Loops
Iterate through all the keys within an object.
let users = {
Max: {
age: 27
},
Mira: {
age: 32
},
Rich: {
age: 48
}
};
for (let user in users) {
console.log(user); // logs: Max, Mira, Rich
if (users[user].age > 40) {
console.log(`${user} is old.`);
}
}
Do…While Loops
A do...while
loop ensures that the code inside the loop will run at least once.
var myArr = [];
var i = 0;
do {
myArr.push(i);
i++;
} while (i < 5);
Replace Loops using Recursion
/* For Loop */
function multiply(arr, n) {
var product = 1;
for (var i = 0; i < n; i++) {
product *= arr[i];
}
return product;
}
/* Replace For Loop with Recursion */
function multiply(arr, n) {
if (n <= 0) {
return 1;
} else {
return multiply(arr, n - 1) * arr[n - 1];
}
}
Note: Recursive functions must have a base case when they return without calling the function again (in this example, when n <= 0
), otherwise they can never finish executing.
/* Count to n */
function countup(n) {
if (n < 1) {
return [];
} else {
const countArray = countup(n - 1);
countArray.push(n);
return countArray;
}
}
console.log(countup(5)); // [ 1, 2, 3, 4, 5 ]
Note: The push happens last, after the recursive call has returned. Thats why the value of n
decreases, but the values in the final array are increasing.
/* Create a Range of Numbers */
function rangeOfNumbers(startNum, endNum) {
if (startNum == endNum) {
return [startNum];
} else if (startNum < endNum) {
const rangeArray = rangeOfNumbers(startNum + 1, endNum);
rangeArray.unshift(startNum);
return rangeArray;
}
};
console.log(rangeOfNumbers(5, 10)); // [ 5, 6, 7, 8, 9, 10 ]