λ°˜μ‘ν˜•

# μš”μ•½

  • λ‹¨μˆœνžˆ 무언가λ₯Ό λ°˜λ³΅ν•˜λ©΄μ„œ μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ ➑ forEach (원본 λ°°μ—΄ λ³€κ²½λ˜μ§€ μ•ŠμŒ / μƒˆλ‘œμš΄ λ°°μ—΄ λ°˜ν™˜ν•˜μ§€ μ•ŠμŒ)
  • 원본 배열을 λ³€κ²½ν•˜μ§€ μ•Šκ³  λ³€ν˜•λœ 데이터λ₯Ό λ”°λ‘œ μ‚¬μš©ν•  ν•„μš”κ°€ μžˆμ„ λ•Œ ➑ map (원본 λ°°μ—΄ λ³€κ²½λ˜μ§€ μ•ŠμŒ / μƒˆλ‘œμš΄ λ°°μ—΄ λ°˜ν™˜)

βœ… forEach

  • λ°°μ—΄μ˜ 각 μš”μ†Œμ— λŒ€ν•΄ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
const numbers = [1, 2, 3];
numbers.forEach(num => {
  console.log(num * 2); // 2, 4, 6 좜λ ₯
});
console.log(numbers); // [1, 2, 3] 원본 배열은 κ·ΈλŒ€λ‘œ!
  • forEachλŠ” λ°°μ—΄μ˜ μš”μ†Œλ“€μ„ μˆœνšŒν•˜λ©΄μ„œ 각 μš”μ†Œλ₯Ό 2배둜 κ³„μ‚°ν•΄μ„œ 좜λ ₯ν•˜μ§€λ§Œ, μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€.
    (원본 배열은 λ³€κ²½λ˜μ§€ μ•ŠμŒ)
  • 원본 배열을 μœ μ§€ν•˜λ©΄μ„œ, λ‹¨μˆœνžˆ 반볡 μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ μ‚¬μš©(데이터λ₯Ό 화면에 좜λ ₯ν•˜κ±°λ‚˜, 둜그 찍을 경우 μ‚¬μš©λ¨)

βœ… map

  • λ°°μ—΄μ˜ 각 μš”μ†Œμ— λŒ€ν•΄ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³ , κ·Έ κ²°κ³Όλ₯Ό μƒˆλ‘œμš΄ λ°°μ—΄λ‘œ λ°˜ν™˜ν•  λ•Œ μ‚¬μš©ν•œλ‹€.
const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6] λ³€ν˜•λœ 데이터λ₯Ό μƒˆ λ°°μ—΄λ‘œ λ°˜ν™˜
console.log(numbers); // [1, 2, 3] 원본 배열은 κ·ΈλŒ€λ‘œ μœ μ§€!
  • map은 배열을 μˆœνšŒν•˜λ©° 각 μš”μ†Œλ₯Ό 2배둜 λ§Œλ“€μ–΄ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•œλ‹€.
  • 원본 배열을 κ·ΈλŒ€λ‘œ 두고 μƒˆλ‘œμš΄ 배열을 μƒμ„±ν•œλ‹€.
    ➑ 원본 배열을 λ³€κ²½ν•˜μ§€ μ•ŠμŒμœΌλ‘œ 데이터 손싀 막을 수 있고, λ³€ν˜•λœ 데이터λ₯Ό μž¬μ‚¬μš©ν•˜κ±°λ‚˜ μ–΄λ”˜κ°€ μ €μž₯ν•  λ•Œ μœ μš©ν•˜λ‹€.
    (ex: 가격 데이터λ₯Ό λ³€ν˜•ν•΄μ„œ 할인가λ₯Ό κ³„μ‚°ν•œ ν›„, 이λ₯Ό μƒˆλ‘œμš΄ λ°°μ—΄λ‘œ μ €μž₯ κ°€λŠ₯)

 

πŸ”₯ map을 μ‚¬μš©ν•΄μ•Ό ν•  μƒν™©μ—μ„œ forEachλ₯Ό μ‚¬μš©ν•˜λŠ” 경우 λ°œμƒν•˜λŠ” 문제

1. λ³€ν˜•λœ 데이터λ₯Ό 얻을 수 μ—†λ‹€.

forEachλŠ” λ‹¨μˆœνžˆ λ°°μ—΄μ˜ 각 μš”μ†Œλ₯Ό μˆœνšŒν•˜λ©΄μ„œ μž‘μ—…μ„ μˆ˜ν–‰ν•  λΏμ΄λ―€λ‘œ, λ³€ν˜•λœ 데이터λ₯Ό μ €μž₯ν•˜κ±°λ‚˜ μž¬μ‚¬μš©ν•  수 μ—†λ‹€.

const numbers = [1, 2, 3];
const doubled = numbers.forEach(num => num * 2);
console.log(doubled); // undefined

forEachλ₯Ό μ‚¬μš©ν•˜λ©΄ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— doubled λ³€μˆ˜λŠ” undefinedκ°€ λœλ‹€.
λ³€ν˜•λœ 데이터λ₯Ό λ°°μ—΄λ‘œ μ–»μœΌλ €λŠ” μƒν™©μ—μ„œ forEachλ₯Ό μ‚¬μš©ν•˜λ©΄, 데이터λ₯Ό λ”°λ‘œ μ €μž₯ν•  수 μ—†λ‹€.

const numbers = [1, 2, 3];
numbers.forEach(num => {
  num = num * 2; // μž‘μ—…μ€ μˆ˜ν–‰λ˜μ§€λ§Œ
});
console.log(numbers); // [1, 2, 3] 원본 배열은 μ—¬μ „νžˆ κ·ΈλŒ€λ‘œ

λ³€ν˜•λœ 데이터λ₯Ό μ €μž₯ν•  수 μ—†μœΌλ‹ˆ μž¬μ‚¬μš©λ„ λ‹Ήμ—° λΆˆκ°€..

2. μ½”λ“œκ°€ λ³΅μž‘ν•΄μ§€κ³  가독성이 떨어진닀.

map은 "λ³€ν˜•λœ 배열을 λ°˜ν™˜"ν•˜λŠ” λͺ…ν™•ν•œ λͺ©μ μ„ 가지고 μ‚¬μš©λœλ‹€. 반면, forEachλŠ” 주둜 "배열을 μˆœνšŒν•˜λ©΄μ„œ μž‘μ—…μ„ μˆ˜ν–‰"ν•  λ•Œ μ‚¬μš©λœλ‹€. 이런 차이λ₯Ό λ¬΄μ‹œν•˜κ³  forEachλ₯Ό λ³€ν˜• μž‘μ—…μ— μ‚¬μš©ν•˜λ©΄, μ½”λ“œμ˜ μ˜λ„κ°€ λΆˆλΆ„λͺ…해지고, μ΄λŠ” κ²°κ΅­ μ½”λ“œμ˜ 가독성을 λ–¨μ–΄λœ¨λ¦¬κ²Œ λœλ‹€.

const numbers = [1, 2, 3];
let doubled = [];
numbers.forEach(num => {
  doubled.push(num * 2);
});

forEach둜 μƒˆλ‘œμš΄ 배열을 λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” 직접 배열을 μƒμ„±ν•˜κ³  각각의 μš”μ†Œλ₯Ό 배열에 λ„£λŠ” μž‘μ—…μ„ ν•΄μ•Ό ν•œλ‹€. μ½”λ“œλŠ” λ³΅μž‘ν•΄μ§€κ³  가독성은 떨어지기 λ•Œλ¬Έμ— 이 경우 map을 μ‚¬μš©ν•˜λŠ” 것이 더 직관적이고 μ˜λ„κ°€ λͺ…ν™•ν•˜λ‹€.

λ°˜μ‘ν˜•

+ Recent posts