이번에는 loop을 거꾸로 실행하는 방법을 알아보자.
const jonas = [
"Jonas",
"Lee",
2037 - 1991,
"teacher",
["Michael", "Peter", "Steven"],
true,
];
for (let i = jonas.length - 1; i >= 0; i--) {
console.log(i, jonas[i]);
}
거꾸로 loop을 해주는 것이므로, 배열의 마지막 인덱스인 jonas.length - 1
을 시작으로 설정해준다. 제일 첫 번째 인덱스 0이 이 경우에는 마지막이 되므로 i >= 0
조건을 사용하고, 거꾸로 가야 하므로 i--
를 적어준다. 이렇게 하면 배열의 마지막 요소부터 첫 번째 요소까지 순서대로 접근할 수 있다.
Loop문 안에 또 다른 loop문을 넣을 수도 있다. 아래의 코드를 보자.
for (let exercise = 1; exercise < 4; exercise++) {
console.log(`--------Starting exercise ${exercise}`);
for (let rep = 1; rep < 6; rep++) {
console.log(` Exercise ${exercise} : Lifting weight reptition ${rep}`);
}
}
이렇게 코드를 쓰면, 첫 번째 loop문의 첫 번째 반복이 시작된 후, 그 안의 두 번째 loop문이 반복된 다음, 첫 번째 loop문의 두 번째 반복이 시작된다.
while을 써서 loop하는 while loop
도 있다.
for (let rep = 1; rep <= 10; rep++) {
console.log(`Lifting weights repetition ${rep}`);
}
let rep = 1;
while (rep <= 10) {
console.log(`WHILE:Lifting weights repetition ${rep}`);
rep++;
}
위의 코드처럼 조건을 괄호 안에 써주고, 그 조건이 충족되는 동안 loop가 실행된다. while loop는 정확히 몇 번 loop를 실행해야 할지 알 수 없을 때 유용하다. 예를 들어
let dice = Math.trunc(Math.random() * 6) + 1;
console.log(dice);
while (dice !== 6) {
console.log(`You rolled a ${dice}`);
dice = Math.trunc(Math.random() * 6) + 1;
if (dice === 6) console.log("Loop is about to end...");
}
이렇게 주사위를 던져서 6이 나올 때까지 반복할 때, 6이 몇 번 던졌을 때 나올지 모르므로 while loop를 사용할 수 있다.
dice = Math.trunc(Math.random() * 6) + 1;
이 코드를 while loop 안에 넣어주는 이유는, 함수 밖의 let dice = Math.trunc(Math.random() * 6) + 1;
만 사용하면, 처음에 6이 나오지 않을 경우 while 문이 무한 loop가 될 수 있기 때문이다. while 문 안에서 주사위 숫자를 다시 설정해 줘야, 6이 나오지 않을 때 다시 while 문의 처음으로 돌아가 무한 loop에서 벗어날 수 있다.