자바스크립트의 반복문을 정리해본다.
# 자바스크립트 반복문 종류
1. for : 고전적인 for문
2. for in : 객체의 프로퍼티 키 열거 전용
3. for of : 이터러블 순회 전용
4. forEach(): 배열 순회 전용 메서드
5. while : 고전적인 while문
6. do while : 고전적인 do...while문
7. Object 객체 메서드: 객체 순회 전용
8. Array.prototye 메서드 : 배열 전용
하나씩 코드와 함께 정리해본다.
# 자바스크립트 반복문 총정리
1. for 문: 고전적인 for문
=> for(let i = 0; i < 10; i++){...반복 수행 코드...}
for (let i = 0; i < 10; i++){
console.log(i); // 0~9까지 출력
}
* (주의) 변수 선언 시, const를 쓰면 값 변경이 불가하여 에러가 발생하니 주의
2. for in 문: 객체의 프로퍼티 키 열거 전용
=> for(const key in 객체){...반복 수행 코드...}
* (주의)해당 객체가 상속받는 프로토타입 체인상의 모든 프로퍼티 키를 열거한다.(단, [[Enumerable]] 값이 false인 프로퍼티는 제외)
const obj = {
name: 'curryyou',
job: 'engineer'
}
for (const key in obj){
console.log(`${key} : ${obj[key]}`);
}
// name : curryyou
// job : engineer
3. for of 문: 이터러블 순회 전용
=> for(const item of 이터러블){...반복 수행 코드...}
const arr = [10, 20, 30];
for (const item of arr){
console.log(item); // 10, 20, 30 출력
}
* (참고) 이터러블에는 String, Array, Map, Set, DOM컬렉션(HTMLColletion, NodeList) 등이 있다.
4. forEach(): 배열 순회 전용 메서드
=> 배열.forEach( function(value, index, array){...반복 수행 코드...} )
* 콜백함수의 매개변수로 value에 요소값, index에 인덱스, array에 원본 배열이 들어온다.
[10, 20, 30].forEach((value, index, array)=>{
console.log(`${index} : ${value}`); // 0 : 10, 1 : 20, 2: 30 출력
})
5. while 문: 고전적인 while문
=> while(조건식){...반복 수행 코드...}
let num = 0;
while(num <3){
console.log(num); // 0~2 까지 출력
num++;
}
6. do while 문: 고전적인 do...while문
=> do{...반복 수행 코드...} while(조건식);
do{
console.log('일단 한번은 실행된다.'); // 이 코드만 한번 실행되고 반복 종료.
}while(false);
7. Object 객체 메서드: 객체 순회 전용
1) Object.keys(객체)
: 객체의 프로퍼티 '키'를 배열로 반환
Object.keys({name:'curryyou', job:'engineer'});
// [ 'name', 'job' ]
2) Object.values(객체)
: 객체의 프로퍼티 '값'을 배열로 반환
Object.values({name:'curryyou', job:'engineer'});
// [ 'curryyou', 'engineer' ]
3) Object.entries(객체)
: 객체의 프로퍼티 [키, 값]을 배열로 반환
Object.entries({name:'curryyou', job:'engineer'});
// [ [ 'name', 'curryyou' ], [ 'job', 'engineer' ] ]
8. Array.prototye 메서드 : 배열 전용
1) 배열.forEach( (value, index, array)=>{...반복 수행 코드...} )
: 배열의 length만큼 반복하여 콜백함수를 호출한다.
: 콜백함수의 매개변수로 value에 요소값, index에 인덱스, array에 원본배열이 들어온다.
[1, 2, 3, 4].forEach((value, index, array)=>{
console.log(value); // 1, 2, 3, 4 출력
})
2) 배열.map( (value, index, array)=>{...반복 수행 코드...} )
: forEach와 동일(순회 방식, 콜백함수 매개변수 등)
: 다른점 => 각 콜백함수에서 return 하는 값들으로 새로운 배열을 만들어 반환한다.
const map_reuslt = [1, 2, 3, 4].map((value, index, array)=>{
console.log(value); // 1, 2, 3, 4 출력
return value*10; // 각 요소에 10을 곱한 값을 배열로 반환
})
console.log(map_reuslt);
// [ 10, 20, 30, 40 ]
3) 배열.filter( (value, index, array)=>{...반복 수행 코드...} )
: forEach와 동일(순회 방식, 콜백함수 매개변수 등)
: 다른점 => 각 콜백함수에서 return하는 값이 true일 때만, 그때의 value 값들로 새로운 배열을 만들어 반환한다.
const filter_result = [1, 2, 3, 4].filter((value, index, array)=>{
console.log(value); // 1, 2, 3, 4 출력
return value%2 == 0; // value가 짝수인 값들을 배열로 반환
})
console.log(filter_result);
// [ 2, 4 ]
4) 배열.reduce( (previousValue, currentValue, currendIndex, array)=>{...반복 수행 코드...}, initialValue )
: 두번째 매개변수인 initialValue값을 시작으로,
: 각 콜백함수가 return하는 값이 다음에 실행되는 콜백함수의 previousValue로 들어간다.
: 최종적으로 마지막 콜백함수가 return하는 값을 반환한다.(아래의 코드를 보면 이해가 잘 됨.)
const reduce_result = [1, 2, 3, 4].reduce((pv, cv, idx, arr)=>{
return pv + cv; // 이전 콜백함수가 리턴한 값에 현재의 요소 값을 더함(누적 개념)
}, 100); // 100을 초기값으로 줌
console.log(reduce_result);
// 110 (100 + 1 + 2 + 3 + 4 결과)
* 배열에는 이 외에도 every(), some(), find(), findIndex() 등의 메서드가 존재한다.
* (참고) break문
: 반복문과 switch문에서 사용되어 해당 코드 블럭에서 탈출시킨다.
: for문 순회 중에 break; 을 만나면 for 자체를 나가버린다(반복 종료!)
for (let i = 0; i < 10; i++){
if(i == 5){break;} // i값이 5가 되는 순간 for문 종료 => 0~4 까지만 출력
console.log(i);
}
* (참고) continue문
: 해당 차수(?)의 반복을 중단하고, 다음 반복으로 넘어간다.
: for문 순회 중에 continue;를 만나면 for문 처음의 증감식/조건식 부분으로 넘어간다.
for (let i = 0; i < 10; i++){
if(i%2 === 0){continue;} // i가 짝수라면, 다음 반복으로 넘어감 => 홀수만 출력됨
console.log(i);
}
# 결론
일반적인 순회용 반복문은 아래의 메서드 사용을 추천한다.
1. 배열인 경우 : 배열.forEach() 사용
2. 객체인 경우 : Object.keys(객체) 사용
함수형 프로그래밍에 가깝기도 하고, 예상치 못한 버그를 예방할 수 있기 때문이다.
'개발(Development) > JS(자바스크립트)' 카테고리의 다른 글
[자바스크립트] 입력값 체크(한글, 영문, 특수문자, 공백 정규식 활용) (2) | 2021.01.15 |
---|---|
[자바스크립트] HTML 테이블(table) 행 추가 불가 이유, 해결 방법 (0) | 2021.01.05 |
[자바스크립트] 대소/동등/일치 비교 연산자와 Object.is() (2) | 2020.12.11 |
[자바스크립트] 실행 환경 ECMA Script, Web API, Node.js (2) | 2020.12.10 |
[자바스크립트] 문자열 여러번 반복 생성 방법 2가지 (0) | 2020.12.04 |
댓글