TIL - .forEach() & .map()

NaakiteΒ·2022λ…„ 1μ›” 28일

πŸ“JavaScript

λͺ©λ‘ 보기
1/7
post-thumbnail

forEach λ©”μ„œλ“œμ™€ map λ©”μ„œλ“œλ₯Ό 였늘 처음으둜 μ‚¬μš©ν•΄λ³΄μ•˜λ‹€! ν•œλ²ˆ μ•Œμ•„λ³΄μž!


1. Array.prototype.forEach

forEach λ©”μ„œλ“œλŠ” μ‰½κ²Œ 말해 'for문을 λŒ€μ²΄ν•  수 μžˆλŠ” κ³ μ°¨ ν•¨μˆ˜' 이닀. κ·Έλ ‡λ‹€κ³  forλ¬Έκ³Ό λ˜‘κ°™λ‹€λŠ” 말은 μ•„λ‹ˆλ‹€. forEachλ©”μ„œλ“œλŠ” forλ¬Έκ³Ό 달리 λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œκ°€ μˆœνšŒν•΄μ•Όν•˜λ©°, for문처럼 break, continueλ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€λŠ” 차이점이 μ‘΄μž¬ν•œλ‹€.

const array = [1,2,3,4,5];
const result = [];
// for 문으둜
for(let i=0; i<array.length; i++) {     
      result.push(numbers[i] **2); }
// forEach λ©”μ„œλ“œ 이용
array.forEach(item => result.push(item **2));
console.log(result); // [1,4,9,16,25]

λ°°μ—΄μ˜ μš”μ†Œκ°€ 5개 이기 λ•Œλ¬Έμ—, 콜백 ν•¨μˆ˜λ„ 5번 ν˜ΈμΆœλœλ‹€.
forEach λ©”μ„œλ“œμ— λŒ€ν•΄ μ°ΎλŠ” κ³Όμ •μ—μ„œ 콜백 ν•¨μˆ˜λΌλŠ” 말이 λ‚˜μ™€, 콜백 ν•¨μˆ˜μ— λŒ€ν•΄ λ¨Όμ € κ°„λ‹¨νžˆ μ°Ύμ•„λ³΄μ•˜λ‹€. 콜백 ν•¨μˆ˜λŠ” ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λ₯Ό 톡해 λ‹€λ₯Έ ν•¨μˆ˜μ˜ λ‚΄λΆ€λ‘œ 전달 λ˜λŠ” ν•¨μˆ˜λ₯Ό 콜백 ν•¨μˆ˜λΌκ³  ν•œλ‹€. 더 깊이 μ°Ύμ•„λ³΄λ‹ˆ, 비동기적.. λ“± 아직 λ‚΄κ°€ μ΄ν•΄ν•˜κΈ°μ—λŠ” μ–΄λ €μš΄ λ‚΄μš©μ΄ μžˆμ–΄, 일단 μ΄λ ‡κ²Œλ§Œ μ•Œμ•„λ‘μ—ˆλ‹€. (λ‹€μŒμ— μ½œλ°±ν•¨μˆ˜μ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄μž! )

λ‹€μ‹œ forEach λ©”μ„œλ“œμ— λŒ€ν•œ μ΄μ•ΌκΈ°λ‘œ λŒμ•„μ™€μ„œ, μœ„μ˜ μ½”λ“œλ₯Ό 보면 for문을 λŒ€μ²΄ν•  수 μžˆλŠ” 것을 μ•Œμˆ˜μžˆλ‹€.
그리고 forEach λ©”μ„œλ“œλŠ” μ½œλ°±ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ μš”μ†Œκ°’, 인덱슀, this(forEach λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ λ°°μ—΄ κ·Έ 자체) 총 3개의 인수λ₯Ό μ „λ‹¬ν•œλ‹€.

[1,2,3,4,5].forEach((item, index, arr)=> {
       console.log(`μš”μ†Œκ°’: ${item}, 인덱슀: ${index}, this:${JSON.stringify(arr)}`);
}); 
/*
"μš”μ†Œκ°’: 1, 인덱슀: 0, this:[1,2,3,4,5]"
"μš”μ†Œκ°’: 2, 인덱슀: 1, this:[1,2,3,4,5]"
"μš”μ†Œκ°’: 3, 인덱슀: 2, this:[1,2,3,4,5]"
"μš”μ†Œκ°’: 4, 인덱슀: 3, this:[1,2,3,4,5]"
"μš”μ†Œκ°’: 5, 인덱슀: 4, this:[1,2,3,4,5]"
*/

그럼 forEach λ©”μ„œλ“œμ™€ forλ¬Έκ³Ό κΈ°λŠ₯이 거의 λΉ„μŠ·ν•œλ° μ–΄λ–€ 것을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μ„κΉŒ?

forEach λ©”μ„œλ“œλŠ” for문에 λΉ„ν•΄ μ„±λŠ₯이 μ’‹μ§€λŠ” μ•Šμ§€λ§Œ 가독성이 μ’‹λ‹€.
λ”°λΌμ„œ μš”μ†Œκ°€ λ§Žμ€ 배열을 μˆœνšŒν•˜κ±°λ‚˜, μ‹œκ°„μ΄ 많이 κ±Έλ¦¬λŠ” μ½”λ“œ ν˜Ήμ€ 높은 μ„±λŠ₯이 ν•„μš”ν•œ κ²½μš°κ°€ μ•„λ‹ˆλΌλ©΄, forλ¬Έ λŒ€μ‹  forEach λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  것을 ꢌμž₯ν•œλ‹€.

-λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive-

2. Array.prototype.map

map λ©”μ„œλ“œλŠ” μžκΈ°μžμ‹ μ„ ν˜ΈμΆœν•œ λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μˆœνšŒν•˜λ©΄μ„œ, 콜백 ν•¨μˆ˜λ₯Ό 반볡 ν˜ΈμΆœν•˜κ³ , 콜백 ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’λ“€λ‘œ κ΅¬μ„±λœ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•˜λŠ” 것이닀.

const numbers = [1,4,9];
const result = numbers.map(item => Math.sqrt(item));
console.log(result); // map λ©”μ„œλ“œμ—μ„œ μƒˆλ‘œμš΄ λ°°μ—΄ λ°˜ν™˜. [1,2,3]
console.log(numbers); // 원본 배열은 λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€.

그리고 forEach λ©”μ„œλ“œμ²˜λŸΌ μ½œλ°±ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄μ„œ μš”μ†Œκ°’, 인덱슀, this(mapλ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œ λ°°μ—΄ κ·Έ 자체) 총 3개의 인수λ₯Ό μ „λ‹¬ν•œλ‹€.

[1,2,3].map((item, index, arr)=> {
   console.log(`μš”μ†Œκ°’: ${item}, 인덱슀:${index}, this: ${JSON.stringify(arr)}`);
  return item;
});
/*
"μš”μ†Œκ°’: 1, 인덱슀:0, this: [1,2,3]"
"μš”μ†Œκ°’: 2, 인덱슀:1, this: [1,2,3]"
"μš”μ†Œκ°’: 3, 인덱슀:2, this: [1,2,3]"
*/

βœ… forEach λ©”μ„œλ“œμ™€ map λ©”μ„œλ“œμ˜ 차이점

이 λ‘˜μ˜ 차이점은 forEach λ©”μ„œλ“œλŠ” undefined λ₯Ό λ°˜ν™˜ν•˜κ³ , map λ©”μ„œλ“œλŠ” 콜백 ν•¨μˆ˜μ˜ λ°˜ν™˜κ°’λ“€λ‘œ κ΅¬μ„±λœ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•œλ‹€λŠ” 차이점이 μžˆλ‹€.
μ‰½κ²Œ 말해 forEach λ©”μ„œλ“œλŠ” λ°°μ—΄ μš”μ†Œλ§ˆλ‹€ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜κ³  (즉 ν•œλ²ˆ μ‹€ν–‰), 아무 값도 λ°˜ν™˜ν•˜μ§€ μ•Šμ§€λ§Œ, map λ©”μ„œλ“œλŠ” λͺ¨λ“  각각의 μš”μ†Œλ“€μ΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ³  값을 λ³€κ²½ν•˜μ—¬, μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•œλ‹€λŠ” 차이가 μžˆλ‹€.

profile
πŸ‘©β€πŸ’»πŸƒβ€β™€οΈ

0개의 λŒ“κΈ€