π λ°°μ΄ λ©μλ(map, filter, reduce)λ 무μμΈκ°μ?
μλ°μ€ν¬λ¦½νΈμμ λ°°μ΄μ λ€λ£¨λ κ²μ λ§€μ° μ€μν΄μ. νΉν map, filter, reduce κ°μ λ°°μ΄ λ©μλλ λ°°μ΄μ κ°νΈνκ³ ν¨κ³Όμ μΌλ‘ μ²λ¦¬ν μ μλ λ°©λ²μ μ 곡ν΄μ. μ΄ μΈ κ°μ§ λ©μλλ κ°κ° λ°°μ΄μ λ³ν, νν°λ§, μΆμνλ μμ μ μνν΄μ.
λΉμ νμλ©΄, mapμ μλμ λ°°μ΄μμ 무μΈκ°λ₯Ό λ³νν΄μ μλ‘μ΄ λ°°μ΄μ λ§λλ μμ μ΄κ³ , filterλ μνλ 쑰건μ λ§λ μμλ§ κ±Έλ¬λ΄λ μμ , κ·Έλ¦¬κ³ reduceλ λ°°μ΄μ ν λ©μ΄λ¦¬λ‘ μΆμνμ¬ λ¨μΌ κ°μΌλ‘ λ§λλ μμ μ΄μμ.
π₯οΈ λ°°μ΄ λ©μλ(map, filter, reduce)μ κ°λ κ³Ό μμ
1. map: λ°°μ΄μ λ³ννλ λ©μλ
- map λ©μλλ λ°°μ΄μ κ° μμμ λμΌν μμ μ μννμ¬, μλ‘μ΄ λ°°μ΄μ λ°νν΄μ. κΈ°μ‘΄ λ°°μ΄μ λ³κ²½νμ§ μκ³ , μλ‘μ΄ λ°°μ΄μ μμ±νμ£ .
- μλ₯Ό λ€μ΄, λ°°μ΄μ λͺ¨λ μ«μλ₯Ό 2λ°°λ‘ λ§λ€κ±°λ, λ¬Έμμ΄μ λλ¬Έμλ‘ λ°κΎΈλ μμ μ ν λ μ μ©ν΄μ.
// λ°°μ΄μ κ° μμλ₯Ό 2λ°°λ‘ λ§λ€κΈ°
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(num => num * 2);
console.log("μλ λ°°μ΄:", numbers); // [1, 2, 3, 4, 5]
console.log("2λ°°λ‘ λ³νλ λ°°μ΄:", doubled); // [2, 4, 6, 8, 10]
map λ©μλλ numμ΄λΌλ μΈμλ₯Ό λ°μ κ·Έ κ°μ 2λ°°λ‘ λ§λ ν, μλ‘μ΄ λ°°μ΄ doubledμ κ·Έ κ²°κ³Όλ₯Ό λ΄μμ.
μλ λ°°μ΄μΈ numbersλ λ³νμ§ μκ³ , μλ‘μ΄ λ°°μ΄μ΄ λ°νλλ€λ μ μ΄ μ€μν΄μ.
2. filter: 쑰건μ λ§λ μμλ§ μΆμΆνλ λ©μλ
- filter λ©μλλ λ°°μ΄μ μμ μ€μμ νΉμ 쑰건μ λ§μ‘±νλ μμλ€λ§ κ±Έλ¬λ΄μ΄ μλ‘μ΄ λ°°μ΄μ λ°νν΄μ.
- μλ₯Ό λ€μ΄, λ°°μ΄μμ μ§μλ§ μΆμΆνκ±°λ, νΉμ κΈ°μ€μ μΆ©μ‘±νλ μμλ€λ§ λ¨κΈ°κ³ μΆμ λ μ¬μ©ν΄μ.
// λ°°μ΄μμ μ§μλ§ μΆμΆνκΈ°
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log("μλ λ°°μ΄:", numbers); // [1, 2, 3, 4, 5]
console.log("μ§μλ§ μΆμΆλ λ°°μ΄:", evenNumbers); // [2, 4]
filter λ©μλλ λ°°μ΄μ κ° μμκ° μ§μμΈμ§ νμΈνκ³ , κ·Έ 쑰건μ λ§μ‘±νλ μμλ€λ§ μλ‘μ΄ λ°°μ΄ evenNumbersμ λ΄μμ.
μλ λ°°μ΄ numbersλ λ³νμ§ μμμ.
3. reduce: λ°°μ΄μ μΆμνλ λ©μλ
- reduce λ©μλλ λ°°μ΄μ μννλ©°, κ° μμλ₯Ό λμ νμ¬ λ¨μΌ κ°μΌλ‘ μΆμν΄μ. λ°°μ΄μ λͺ¨λ μμλ₯Ό νλμ κ°μΌλ‘ μ€μ΄λ λ° μ¬μ©λλ©°, ν©κ³, νκ· , μ΅λκ° λ±μ ꡬν λ λ§μ΄ μ¬μ©ν΄μ.
- reduceλ λ κ°μ μΈμλ₯Ό λ°λλ°, 첫 λ²μ§Έλ λμ κ°(accumulator), λ λ²μ§Έλ νμ¬ μ²λ¦¬ μ€μΈ μμ(current value)μμ.
// λ°°μ΄μ ν©κ³ ꡬνκΈ°
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log("μλ λ°°μ΄:", numbers); // [1, 2, 3, 4, 5]
console.log("λ°°μ΄μ ν©κ³:", sum); // 15
reduce λ©μλλ λ°°μ΄μ 첫 λ²μ§Έ μμλΆν° λ§μ§λ§ μμκΉμ§ μμ°¨μ μΌλ‘ λν΄μ sumμ΄λΌλ λ³μμ ν©κ³λ₯Ό μ μ₯ν΄μ.
μλ λ°°μ΄ numbersλ λ³νμ§ μκ³ , κ²°κ³Όλ λ¨μΌ κ°μΌλ‘ μΆμλΌμ.
π€ λ°°μ΄ λ©μλ(map, filter, reduce)μ νμ© μ
λ°°μ΄ λ©μλλ₯Ό μ¬μ©νλ©΄ μ€μ©μ μΈ λ°μ΄ν° μ²λ¦¬ μμ μ λ§€μ° κ°κ²°νκ² ν΄κ²°ν μ μμ΄μ. μ¬μ©μ λͺ©λ‘κ³Ό κ°μ μ€μ λ°μ΄ν°λ₯Ό μ¬μ©ν΄ map, filter, reduce λ©μλκ° κ°κ° μ΄λ»κ² νμ©λ μ μλμ§ μ΄ν΄λ³Όκ²μ.
1. map: λ°°μ΄μ κ° μμλ₯Ό λ³ννλ λ©μλ
map λ©μλλ λ°°μ΄μ κ° μμμ λμΌν μμ μ μννμ¬ μλ‘μ΄ λ°°μ΄μ λ°νν΄μ. μ£Όλ‘, λ°°μ΄μ κ° μμλ₯Ό λ³ννλ λ° μ μ©νκ² μ¬μ©λ©λλ€.
- map λ©μλλ₯Ό ν΅ν΄ λ°°μ΄μ ν¬κΈ°λ₯Ό μ μ§νλ©΄μ μμμ λ΄μ©λ§ λ³κ²½ν μ μμ΄μ.
- νμ€μ μΈ λ°μ΄ν° ꡬ쑰(μ¬μ©μ λͺ©λ‘ λ±)μ μ μ©νμ¬, λ°°μ΄μ κ° κ°μ²΄μμ νΉμ μμ±λ§μ κ°νΈνκ² μΆμΆν μ μμ΅λλ€.
μμ : μ¬μ©μ μ΄λ¦λ§ μΆμΆνκΈ°
const users = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 35 },
];
// μ¬μ©μ λͺ©λ‘μμ μ΄λ¦λ§ μΆμΆ
const userNames = users.map(user => user.name);
console.log(userNames); // ["Alice", "Bob", "Charlie"]
μ΄ μμ μμλ map λ©μλλ₯Ό μ¬μ©ν΄ μ¬μ©μ λͺ©λ‘μμ μ΄λ¦λ§ μΆμΆνμ¬ μλ‘μ΄ λ°°μ΄μ λ§λ€μμ΄μ.
mapμ κ° μμμμ μ΄λ¦λ§ λ°ννκ³ , κ·Έ κ²°κ³Όλ₯Ό λ°°μ΄μ λ΄μ΅λλ€.
μλ λ°°μ΄μΈ usersλ λ³νμ§ μμΌλ©°, μλ‘μ΄ λ°°μ΄ userNamesκ° λ°νλΌμ.
2. filter: 쑰건μ λ§λ μμλ§ μΆμΆνλ λ©μλ
filter λ©μλλ λ°°μ΄μ μμ μ€μμ νΉμ 쑰건μ λ§μ‘±νλ μμλ€λ§ κ±Έλ¬λ΄μ΄ μλ‘μ΄ λ°°μ΄μ λ°νν΄μ.
- filter λ©μλλ₯Ό μ¬μ©νλ©΄ μνλ 쑰건μ λ§λ λ°μ΄ν°λ§ κ°νΈνκ² μΆμΆν μ μμ΄μ.
- λ°°μ΄μ ν¬κΈ°κ° μ€μ΄λ€λ©°, μλ³Έ λ°°μ΄μ λ³νμ§ μκ³ μλ‘μ΄ λ°°μ΄λ§ λ°νλλ€λ μ μ κΈ°μ΅νμΈμ.
μμ : λμ΄κ° 30 μ΄μμΈ μ¬μ©μλ§ μΆμΆνκΈ°
const users = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 35 },
];
// λμ΄κ° 30 μ΄μμΈ μ¬μ©μλ§ μΆμΆ
const adults = users.filter(user => user.age >= 30);
console.log(adults);
// [{ name: "Bob", age: 30 }, { name: "Charlie", age: 35 }]
μ΄ μμ μμλ filter λ©μλλ₯Ό μ¬μ©ν΄ λμ΄κ° 30 μ΄μμΈ μ¬μ©μλ§ κ±Έλ¬λμ΄μ.
쑰건μ λ§μ‘±νλ μμλ€λ§ μλ‘μ΄ λ°°μ΄μ λ΄κ²¨ λ°νλ©λλ€. 쑰건μ λ§μ§ μλ μμλ μλ‘μ΄ λ°°μ΄μ ν¬ν¨λμ§ μμμ.
3. reduce: λ°°μ΄μ νλμ κ°μΌλ‘ μΆμνλ λ©μλ
reduce λ©μλλ λ°°μ΄μ λͺ¨λ μμλ₯Ό λμ νμ¬ λ¨μΌ κ°μΌλ‘ μΆμν΄μ. μ£Όλ‘, λ°°μ΄μ ν©κ³λ νκ· μ ꡬν λ μ¬μ©λΌμ.
- reduce λ©μλλ λ°°μ΄μ λ¨μΌ κ°μΌλ‘ μ€μ¬μΌ νλ μμ μ μ ν©ν΄μ.
- λ°°μ΄μ ν©κ³, νκ· , κ³±μ , λλ λ€λ₯Έ 볡μ‘ν κ³μ°μ΄ νμν μν©μμ μμ£Ό μ¬μ©λΌμ.
μμ : μ¬μ©μμ μ΄ λμ΄ κ³μ°νκΈ°
const users = [
{ name: "Alice", age: 25 },
{ name: "Bob", age: 30 },
{ name: "Charlie", age: 35 },
];
// μ¬μ©μμ λμ΄ ν©κ³ κ³μ°
const totalAge = users.reduce((acc, user) => acc + user.age, 0);
console.log(totalAge); // 90
μ΄ μμ μμλ reduce λ©μλλ₯Ό μ¬μ©ν΄ μ¬μ©μλ€μ μ΄ λμ΄λ₯Ό κ³μ°νμ΄μ.
acc(λμ κ°)λ λ°°μ΄μ κ° μμμ λμ΄λ₯Ό λνλ©΄μ κ³μν΄μ λμ λ©λλ€.
λ§μ§λ§μΌλ‘ μ΄ λμ΄κ° λ°νλΌμ. μ¬κΈ°μ 0μ λμ κ³μ°μ μ΄κΈ°κ°μ λλ€.
π¨ μ£Όμν μ
λ°°μ΄ λ©μλλ₯Ό μ¬μ©ν λ μ£Όμν λͺ κ°μ§ μ¬νμ΄ μμ΄μ.
- μλ³Έ λ°°μ΄μ λ³νμ§ μμμ.
map
,filter
,reduce
λ©μλλ κΈ°μ‘΄ λ°°μ΄μ λ³κ²½νμ§ μκ³ , μλ‘μ΄ λ°°μ΄ λλ κ°μ λ°νν΄μ. λ°λΌμ μλ³Έ λ°°μ΄μ μμ νκ² μ μ§ν μ μμ΄μ. - μ΄κΈ°κ°μ μ€μ νλ κ²μ΄ μ€μν΄μ. νΉν
reduce
λ©μλλ₯Ό μ¬μ©ν λ μ΄κΈ°κ°μ μ€μ νμ§ μμΌλ©΄, μκΈ°μΉ μμ μ€λ₯κ° λ°μν μ μμ΄μ. μ΄κΈ°κ°μ μ§μ ν΄μ€μΌ λ°°μ΄μ 첫 λ²μ§Έ μμλ₯Ό μμ νκ² λ€λ£° μ μμ΄μ. - ν¨μμ λμμ λͺ
ννκ² μ΄ν΄ν΄μΌ ν΄μ.
map
μ λ°°μ΄μ ν¬κΈ°κ° λ³νμ§ μκ³ ,filter
λ λ°°μ΄μ ν¬κΈ°κ° μ€μ΄λ€ μ μμΌλ©°,reduce
λ λ°°μ΄μ λͺ¨λ μμλ₯Ό νλμ κ°μΌλ‘ μΆμνλ€λ μ μ κΈ°μ΅ν΄μΌ ν΄μ. κ°κ°μ λ©μλκ° λ°°μ΄μ μ΄λ»κ² μ²λ¦¬νλμ§ λͺ ννκ² μ΄ν΄νλ κ²μ΄ μ€μν΄μ.
π κ²°λ‘
map, filter, reduceλ μλ°μ€ν¬λ¦½νΈμμ λ°°μ΄μ μ²λ¦¬νλ κ°λ ₯ν λꡬμμ. mapμ λ°°μ΄μ κ° μμλ₯Ό λ³ννκ³ , filterλ νΉμ 쑰건μ λ§μ‘±νλ μμλ§ μΆμΆνλ©°, reduceλ λ°°μ΄μ λ¨μΌ κ°μΌλ‘ μΆμν΄μ. μ΄ μΈ κ°μ§ λ©μλλ₯Ό κ²°ν©νλ©΄ λ§€μ° κ°λ ₯ν λ°°μ΄ μ²λ¦¬ λ‘μ§μ κ°κ²°νκ² μμ±ν μ μμ΄μ.
νΉν, λ°°μ΄ λ©μλλ κ°κ²°ν μ½λ μμ±κ³Ό λͺ νν μλ ννμ λμμ μ£ΌκΈ° λλ¬Έμ, λ°°μ΄μ λ€λ£° λλ μ΄ λ©μλλ€μ μ κ·Ή νμ©νλ κ²μ΄ μ’μμ.
π μΆκ° μ 보
- μλ°μ€ν¬λ¦½νΈ λ°°μ΄ λ©μλμ λν λ κΉμ μ΄ν΄λ₯Ό μνμ λ€λ©΄, MDN Web Docsμμ μμΈν μ 보λ₯Ό μ°Ύμλ³Ό μ μμ΄μ.
'Language > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JavaScript] μ΄λ²€νΈ 루ν(Event Loop) (1) | 2024.10.27 |
---|---|
[JavaScript] νμ΄ν ν¨μμ μΌλ° ν¨μμ μ°¨μ΄ (0) | 2024.10.02 |
[JavaScript] ꡬ쑰 λΆν΄ ν λΉ(Destructuring) (0) | 2024.04.21 |
[JavaScript] ν΄λ‘μ (0) | 2024.03.23 |
[JavaScript] this (1) | 2024.03.18 |
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!