Languages

for vs forEach() vs map()

진호우 2024. 1. 6. 13:35

for

for 문의 간단한 예시

let str = '';

for (let i = 0; i < 9; i++) {
  str = str + i;
}

console.log(str);
// Expected output: "012345678"

 

Syntax

for (initialization; condition; afterthought)
  statement

initialization : var이나 let으로 초기값 선언

contition : 매 반복마다 평가할 식. 평가 결과가 참이면 statement를 실행, 거짓이라면 다음으로 건너뛴다.

afterthought : 매 반복 후 진행할 식. 다음 condition 평가 전에 발생한다.

statement : condition이 참일 때 실행하는 문. {}로 묶어야 한다.

 


 

Array.prototype.forEach()

Array 인스턴스의 forEach() 매서드는 각 배열 요소에 대해 제공된 함수를 한 번씩 실행한다.

const array1 = ['a', 'b', 'c'];

array1.forEach((element) => console.log(element));

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

 

Syntax

forEach(callbackFn)
forEach(callbackFn, thisArg)

 

forEach() 매서드는 순회 매서드이다. 배열의 각 element에 대해 제공된 callbackFn 을 오름차순 index 순서로 한 번씩 호출한다. map()과 달리 forEach()는 항상 undefined를 반환한다.

 

forEach()는 호출되는 배열을 변경하지 않지만, callbackFn으로 제공되는 함수는 변경할 수 있다. 하지만 배열의 length 기준은 callbackFn을 호출하기 전에 계산한다.

 

하지만 이해하기 어려운 코드를 만드는 경우가 많으므로 지양하도록 하자.

 

forEach() 는 for과 다르게 loop를 중단하는 방법이 없다. (break; 사용 불가)

 

for 문을 forEach()로 바꾸기

const items = ["item1", "item2", "item3"];
const copyItems = [];

// 전
for (let i = 0; i < items.length; i++) {
  copyItems.push(items[i]);
}

// 후
items.forEach((item) => {
  copyItems.push(item);
});

 


Array.prororype.map()

map() 매서드는 배열 내의 모든 요소에 각각에 대해 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환한다.

const array1 = [1, 4, 9, 16];

// Pass a function to map
const map1 = array1.map((x) => x * 2);

console.log(map1);
// Expected output: Array [2, 8, 18, 32]

 

Syntax

    arr.map(callback(currentValue[, index[, array]])[, thisArg])

 

callback : 새로운 배열 요소를 생성하는 함수.

curentValue : 현재 처리할 요소

index : 처리할 현재 요소의 인덱스

array : map()을 호출한 배열

 

map은 callback함수를 각각의 요소에 대해 한번씩 순서대로 불러 그 함수의 반환값으로 새로운 배열을 만든다. callback함수는 배열 값이 들어있는 인덱스에 대해서만 호출된다.

 

callback 함수는 호출될 때 대상 요소의 값, 그 요소의 인덱스, map을 호출한 원본 배열 3개의 인수를 전달받는다.

map은 호출한 배열의 값을 변형하지 않는다. 단 callback함수에 의해서 변형될 수는 있다.

 

let numbers = [1, 4, 9];
let roots = numbers.map(Math.sqrt);
// roots는 [1, 2, 3]
// numbers는 그대로 [1, 4, 9]

 

 

'Languages' 카테고리의 다른 글

JavaScript 소수점 계산 오류와 해결 방법  (0) 2024.11.06