JavaScript

[JS] some()๊ณผ reduce()์— ๋Œ€ํ•ด~

Irene1988 2025. 2. 27. 01:10

๐Ÿ”น 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 ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!