본문 바로가기
FrontEnd/JavaScript

for each

by 해학 2022. 10. 26.
728x90

 

동일한 코드를 반복 실행해야 합니다.


 

What ?

for each 문

배열의 요소들을 반복하는 메서드 입니다. 

 

 arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])

 

How ?

// for each 문 형태

let 초기 배열(initialization)

초기 배열(initialization).forEach((요소(element), 인덱스(index)) => {
  코드블록 내용(body)
});
구성 요소
요소 예시 설명
  초기 배열 ( initialization ) [ a, b, c, d ... ]   반복할 배열입니다. 
 요소 ( element ) a   배열안의 각각의  값을 나타냅니다.
 인덱스 ( index )  0   배열안의 요소들의 순서를 나타냅니다.
  코드블록 내용 ( body ) console.log ( element) 코드 블록 ( { } ) 안에서 실행할 기능입니다. 

 

 


 - 실행 과정 -

forEach() 메서드 실행
→ 
배열의 요소를 처음부터 끝까지 순회합니다.
→ 
순회 중에 배열의 각 요소에 대해 지정된 함수를 호출합니다.
→  배열의 요소와 함께 해당 요소의 인덱스, 그리고 배열 자체를 인수로 전달
→  배열의 다른 요소들에는 어떤 변경도 가해지지 않습니다.
→  모든 요소에 대해 주어진 함수가 호출되면 종료됩니다.

 


객체( { } )에 forEach() 사용
// 객체 forEach 메서드

let arrayLike = {
  length: 3,
  0: 2,
  1: 3,
  2: 4,
  3: 5, // length가 3이므로 forEach()에서 무시됩니다.
};

Array.prototype.forEach.call(arrayLike, (x) => console.log(x));
// 2
// 3
// 4

  - arrayLike를 첫 번째 매개변수로 넣고, 두 번째 매개변수로는 콜백 함수를 넣습니다. 배열이 아닌 객체에 대해 배열를 호출합니다.


 

Point !

파괴적인 필터링 ( 요소를 반복하면서 선택된 원소를 제거해야 하는 경우 )  사용할 수 없습니다.
// 요소를 제거할 경우

let array = [1, 2, 3, 4, 5];

array = array.forEach(item => item !== 3);

console.log(array) // [1, 2, 3, 4, 5];

   for each 문은 반복을 중지하거나 중단할 수 있는 방법이 없어 array 배열에는 아무런 변화가 없습니다.

 

배열을 순회하면서 원소 값 일부 혹은 전체를 변경할려면 배열의 인덱스를 사용해야 합니다.
// 요소를 수정하는 경우

let array = [1, 2, 3, 4, 5];

array = array.forEach((element, index) => array[3]=6);

console.log(array) // [1, 2, 3, 6, 5]

 

for each 문은  빈 요소에 대해 호출되지 않습니다.
// 빈 값이 있는 배열

const example = [1, /* 빈 슬롯 */, 3];
let count = 0;

example.forEach((element) => {
  console.log({ element });
  count++;
});

console.log({ count });

// { element: 1 }
// { element: 3 }
// { count : 3 }

  - console 값에 빈슬롯이 나타나지 않고, 횟수도 증가하지 않습니다.

 

forEach 문은 명확하고, 유연하고, 버그를 예방효과 그리고 성능 저하가 없습니다.

 


728x90

'FrontEnd > JavaScript' 카테고리의 다른 글

재귀 함수  (0) 2022.11.06
Math  (0) 2022.10.29
prompt()  (0) 2022.10.18
예약어  (0) 2022.10.13
BigInt  (0) 2022.10.09