[JS] some()κ³Ό reduce()μ λν΄~
πΉ some() λ©μλλ?
π λ°°μ΄μ μμ μ€ νλλΌλ 쑰건μ λ§μ‘±νλ©΄ true λ°ν
π λͺ¨λ μμκ° μ‘°κ±΄μ λ§μ‘±νμ§ μμΌλ©΄ false λ°ν
π filter()λ map()λ³΄λ€ λΉ λ₯΄κ² κ²μ¬ κ°λ₯ (νλλ§ μ°ΎμΌλ©΄ λ°λ‘ μ’
λ£λ¨)
β some() κΈ°λ³Έ μ¬μ©λ²
let numbers = [10, 20, 30, 40, 50];
let hasBigNumber = numbers.some(num => num > 30);
console.log(hasBigNumber); // true (40κ³Ό 50μ΄ μμ)
let hasNegative = numbers.some(num => num < 0);
console.log(hasNegative); // false (μμκ° μμ)
β some()μ μ¬μ©ν μ ν¨μ± κ²μ¬
μλ μ½λμμ some()μ μ¬μ©ν΄ μ λ ₯κ°μ΄ 100μ μ΄κ³Όνκ±°λ μλͺ»λ κ°μΈμ§ νμΈνμ΄μ.
let scores = [90, 105, 80];
if (scores.some(score => isNaN(score) || score < 0 || score > 100)) {
console.log('β μ¬λ°λ₯Έ μ μλ₯Ό μ
λ ₯νμΈμ!');
} else {
console.log('β
μ
λ ₯λ μ μλ μ μμ
λλ€.');
}
π λμ λ°©μ
- some()μ΄ scores λ°°μ΄μ λλ©΄μ score > 100 λλ score < 0 λλ isNaN(score) 쑰건μ κ²μ¬
- 105κ° score > 100μ λ§μ‘±νλ―λ‘ μ¦μ true λ°ν ν μ’ λ£
- "β μ¬λ°λ₯Έ μ μλ₯Ό μ λ ₯νμΈμ!" μΆλ ₯
π― some() vs every() μ°¨μ΄
- some() → νλλΌλ 쑰건μ λ§μ‘±νλ©΄ true
- every() → λͺ¨λ μμκ° μ‘°κ±΄μ λ§μ‘±ν΄μΌ true
let scores = [90, 80, 70];
console.log(scores.some(score => score > 100)); // false (100 μ΄κ³Ό μμ)
console.log(scores.every(score => score < 100)); // true (λͺ¨λ κ°μ΄ 100 λ―Έλ§)
π₯ some()μ μ¨μΌ νλ κ²½μ°
β
λ°°μ΄μ νΉμ 쑰건μ λ§μ‘±νλ μμκ° μλμ§ λΉ λ₯΄κ² κ²μ¬ν λ
β
λͺ¨λ μμλ₯Ό κ²μ¬ν νμ μμ΄ νλλΌλ λ°κ²¬λλ©΄ λ°λ‘ λ©μΆ λ
β
μ ν¨μ± κ²μ¬(μ«μ 체ν¬, λ²μ 체ν¬, μ€λ³΅ 체ν¬) λ±μ νμ©ν λ
πΉ reduce()λ?
π λ°°μ΄μ λͺ¨λ μμλ₯Ό νλμ κ°μΌλ‘ μ€μ΄λ(reduce) λ©μλ
π λμ (accumulator) κ°κ³Ό νμ¬(current) κ°μ μ΄μ©νμ¬ μ°μ°
π ν©κ³, νκ· , μ΅λκ°, μ΅μκ°, κ°μ²΄ λ³ν λ± λ€μν μμ
κ°λ₯
β reduce() κΈ°λ³Έ μ¬μ©λ²
let numbers = [10, 20, 30, 40];
let sum = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 100
π λμ λ°©μ (reduce() λ΄λΆ μ€ν κ³Όμ )
Iteration | acc (λμ κ°) | cur (νμ¬κ°) | μ°μ° κ²°κ³Ό |
μ΄κΈ°κ° | 0 | 10 | 0 + 10 = 10 |
1λ²μ§Έ | 10 | 20 | 10 + 20 = 30 |
2λ²μ§Έ | 30 | 30 | 30 + 30 = 60 |
3λ²μ§Έ | 60 | 40 | 60 + 40 = 100 |
π reduce((acc, cur) => acc + cur, 0)
- acc → λμ κ° (μ΄μ μ°μ° κ²°κ³Ό)
- cur → νμ¬ λ°°μ΄ μμ
- 0 → μ΄κΈ°κ° (μλ΅νλ©΄ λ°°μ΄μ 첫 λ²μ§Έ μμκ° μ΄κΈ°κ°)
π― reduce()λ₯Ό νμ©ν λ€μν μμ
1οΈβ£ λ°°μ΄ μμ ν© κ΅¬νκΈ°
let numbers = [5, 10, 15];
let total = numbers.reduce((acc, cur) => acc + cur, 0);
console.log(total); // 30
2οΈβ£ λ°°μ΄ μμ νκ· κ΅¬νκΈ°
let scores = [80, 90, 100];
let average = scores.reduce((acc, cur) => acc + cur, 0) / scores.length;
console.log(average); // 90
3οΈβ£ μ΅λκ° & μ΅μκ° κ΅¬νκΈ°
let numbers = [25, 78, 3, 99, 50];
let max = numbers.reduce((acc, cur) => (acc > cur ? acc : cur), numbers[0]);
console.log(max); // 99
let min = numbers.reduce((acc, cur) => (acc < cur ? acc : cur), numbers[0]);
console.log(min); // 3
4οΈβ£ λ°°μ΄ μμ κ°μ μΈκΈ° (κ°μ²΄ λ³ν)
let fruits = ['π', 'π', 'π', 'π', 'π', 'π'];
let count = fruits.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1; // νμ¬ κ³ΌμΌ κ°μ μΉ΄μ΄νΈ
return acc;
}, {});
console.log(count); // { 'π': 3, 'π': 2, 'π': 1 }
*** μ΄κ±° μ½λκ° μ΄λ €μ°λ μ’ λ... μμΈν νμ΄λ³΄μ!
1. λ°°μ΄μ reduce()λ‘ μννλ©΄μ κ°μ μ μ₯
let count = fruits.reduce((acc, cur) => { ... }, {});
- acc → λμ κ°μ²΄ (κ³ΌμΌ κ°μλ₯Ό μ μ₯ν κ°μ²΄)
- cur → νμ¬ μν μ€μΈ κ³ΌμΌ (π, π, λ±)
- {} → μ΄κΈ°κ°μΌλ‘ λΉ κ°μ²΄ {} μ¬μ© (κ²°κ³Όλ₯Ό μ μ₯ν 곡κ°)
2. κ° κ³ΌμΌ κ°μ μΈκΈ°
acc[cur] = (acc[cur] || 0) + 1;
μ΄ λΆλΆμ΄ ν΅μ¬μ λλ€! π‘
- acc[cur] → νμ¬ κ³ΌμΌ(cur)μ κ°μλ₯Ό accμμ κ°μ Έμ΄
- λ§μ½ 첫 λ±μ₯μ΄λΌλ©΄ acc[cur]μ΄ undefined
- undefined || 0 → 0μΌλ‘ μ€μ (μ΄κΈ°κ°μ 0μΌλ‘ μ€μ )
- (acc[cur] || 0) + 1 → κΈ°μ‘΄ κ°μμμ +1 μ¦κ°
- acc[cur] = ... → μ¦κ°λ κ°μλ₯Ό λ€μ κ°μ²΄μ μ μ₯
π μμ λ‘ νμ΄λ³΄κΈ°
| cur κ° | κΈ°μ‘΄ acc[cur] κ° | (acc[cur] || 0) + 1 | μ΅μ’ acc κ°μ²΄ | |----------|-------------------|---------------------|------------------| | π | undefined (μμ) | 0 + 1 = 1 | { 'π': 1 } | | π | undefined (μμ) | 0 + 1 = 1 | { 'π': 1, 'π': 1 } | | π | 1 (μ΄λ―Έ μμ) | 1 + 1 = 2 | { 'π': 2, 'π': 1 } | | π | undefined (μμ) | 0 + 1 = 1 | { 'π': 2, 'π': 1, 'π': 1 } | | π | 2 (μ΄λ―Έ μμ) | 2 + 1 = 3 | { 'π': 3, 'π': 1, 'π': 1 } | | π | 1 (μ΄λ―Έ μμ) | 1 + 1 = 2 | { 'π': 3, 'π': 2, 'π': 1 } |
3. κ²°κ³Ό μΆλ ₯
console.log(count);
// { 'π': 3, 'π': 2, 'π': 1 }
→ κ° κ³ΌμΌμ΄ λͺ λ² λμλμ§ κ°μλ₯Ό μΈμ κ°μ²΄λ‘ λ³ν μλ£! π―
β¨ μ΅μ’ μ 리
β reduce()λ₯Ό μ¬μ©νμ¬ λ°°μ΄μ κ°μ²΄λ‘ λ³ν
β (acc[cur] || 0) + 1 μ μ¬μ©ν΄ νμ¬ κ°μ΄ μμΌλ©΄ 0μΌλ‘ μ€μ ν 1 μ¦κ°
β κ°μ²΄ {}λ₯Ό μ΄κΈ°κ°μΌλ‘ μ€μ νκ³ curμ ν€(key)λ‘ μ¬μ©
5οΈβ£ κ°μ²΄ λ°°μ΄μ ν© κ΅¬νκΈ°
let items = [
{ name: "μ¬κ³Ό", price: 1000 },
{ name: "λ°λλ", price: 1500 },
{ name: "ν¬λ", price: 2000 }
];
let totalPrice = items.reduce((acc, cur) => acc + cur.price, 0);
console.log(totalPrice); // 4500
π₯ reduce() vs forEach() vs map() μ°¨μ΄
λ©μλ | λͺ©μ | λ°νκ° | νΉμ§ |
forEach() | λ¨μ λ°λ³΅ μ€ν | μμ (undefined) | break λΆκ°λ₯ |
map() | λ°°μ΄ λ³ν | μλ‘μ΄ λ°°μ΄ | μλ³Έ λ°°μ΄ μ μ§ |
reduce() | κ° μΆμ | μ΅μ’ κ²°κ³Όκ° | λμ μ°μ° κ°λ₯ |
π μ 리
- reduce()λ λ°°μ΄μ νλμ κ°μΌλ‘ μ€μ΄λ λ©μλ
- ν©κ³, νκ· , μ΅λ/μ΅μκ°, κ°μ μΈκΈ°, κ°μ²΄ λ³ν λ± νμ© κ°λ₯
- λμ κ°(acc)κ³Ό νμ¬κ°(cur)μ μ΄μ©ν κ³μ° ꡬ쑰
- reduce()λ₯Ό μ¬μ©νλ©΄ forλ¬Έλ³΄λ€ λ κ°κ²°ν μ½λ μμ± κ°λ₯!
*μ ν¬μ€ν μ μ±GPT κΈ°λ°μΌλ‘ μμ±λμμ΅λλ€!