본문 바로가기
JavaScript

[JS] 반복문

by 홍code 2022. 7. 2.

특정 명령을 반복해서 수행할 수 있도록 도와주는 문법

For 반복문

  • 루프의 핵심은 어떤 기능을 반복하는 것
  • 1부터 10까지 출력하기 
for (let i = 1; i <= 10; i ++) {
	console.log(i);
}
  • 루프에 대해 새로운 변수를 만든다. (i)
  • 세미콜론을 기준으로 중간 부분은 얼마나 오랫동안 혹은 언제까지 루프를 실행할지 명령하는 조건이 있다. 루프가 계속 실행되기 위해서는 조건이 참이 되어야 한다. 조건이 거짓이 되면 루프 종료
  • 마지막 부분은 증감 표현식 (i값을 업데이트)

무한 루프의 위험성 

  • 멈추지 않는 루프
  • 루프가 멈추지 않으면 JavaScript가 가진 메모리를 모두 사용하게 된다.
  • 이 조건이 거짓이 될 것인가? 를 생각해보기

배열 루프

  • 배열의 각 요소에 대해 어떤 기능을 반복시키기
  • 배열의 모든 요소에 접근하는 법  : 배열의 길이를 구하는 .length와 인덱스 활용
for (let i = 0; i < array.length; i++) {
	console.log(array[i]);
}

for (let i = array.length; i >= 0; i--) {
	console.log(array[i]);
}

중첩 루프

  • 보통 중첩되는 for 루프 변수로는 i, j, k를 사용한다.
  • 중첩 루프는 보통 중첩된 배열을 통과하거나 반복해야 할 때 사용된다.
const food = [
	['apple', 'banana', 'strawberry'],
	['onion', 'carrot', 'paprika'],
	['pizza', 'hamberger', 'chicken']
]

for (let i = 0; i < food.length; i++) {
	const row = food[i];
	for (let j = 0; j < row.length; j++) {
		console.log(row[j]);
	}
}
  • for... of 문으로 개선할 수 있다.

While 루프

  • while 구문 하나와 괄호 안에 조건문 하나
  • 조건이 참이면 계속 반복하고, 거짓이면 루프를 종료한다.
const SECRET = "password2";

let pwd = prompt("enter the secret code...");
while (pwd !== SECRET) {
	pwd = prompt("enter the secret code...");
}
console.log("WELCOME!!!");

정지 / break 키워드

let cnt =0;
while (true) {
	if (cnt==5) break;
    console.log(cnt);
    cnt++;
}
  • while 조건이 참이고 break가 없으면 계속 반복한다.

for 루프의 유용함

for... of 문

*for (variable of iterable) {
	statement
}*
  • 배열 또는 문자열 등의 반복 가능한 객체(iterable object)에서 반복시키는 기능이 많이 개선되었다.
  • 가독성이 좋아짐.
const foods = [
	['apple', 'banana', 'strawberry'],
	['onion', 'carrot', 'paprika'],
	['pizza', 'hamberger', 'chicken']
]

for (let row of foods) {
	for (let food of row) {
		console.log(food);
	}
}

객체 루프

  • for ... of 문은 반복 가능한 객체에서 사용할 수 있다고 했는데, 실제 객체 즉, 객체 리터럴을 반복시킬 때도 사용할 수 있을 것 같다.
  • 하지만 실제 객체 리터럴은 반복 가능한 객체로 인식되지 않는다.
  • 엄밀히 말하면, 시스템 상으론 배열과 문자열, Map, Set도 객체다.
  • 굳이 객체 리터럴에 쓰려면 for... in 문을 쓰면 되는데, 잘 쓰이지 않음.
  • Object.keys()Object.values() , Object.entries()를 사용하자.
const testScores = {
	hong: 100,
	jeong: 90,
	kim: 85,
	lee: 73
}

for (let person in testScores) { // 객체의 key가 person이 됨
	console.log(`${person} scored ${testScores[person]}`);
}

// 혹은
for (let score of Object.values(testScores)) {
	console.log(score);
}
// 점수 총합

let total = 0;
for (let score of Object.values(testScores)) {
	total += score;
}

// 점수 평균

let total = 0;
let scores = Object.values(testScores);
for (let score of scores) {
	total += score;
}
console.log(total / scores.length);

'JavaScript' 카테고리의 다른 글

[JS] 스코프와 호이스팅  (0) 2022.08.03
[JS] 함수  (0) 2022.08.03
[JS] 객체  (0) 2022.07.02
[JS] 배열  (0) 2022.07.02
[JS] 조건문  (0) 2022.07.02

댓글