๐Ÿ–Œ๏ธFrontend/๐ŸŽจHTML,CSS,JS

[JS] array์˜ ๋งค์„œ๋“œ(forEach, map, filter, reduce)

bananackck 2025. 2. 24. 18:14

JavaScript์˜ array ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๋Œ€๋ถ€๋ถ„ ํƒ์ƒ‰์— ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค.

 

๋ชจ๋‘ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

forEach

for๋ฌธ๊ณผ ๊ฐ™์€ ์—ญํ• . ๋‹จ์ˆœ ์ˆœํšŒ์— ์ ํ•ฉํ•˜๋‹ค.

const array = [1, 2, 3];
array.forEach((item) => {
  console.log(item);
});
// 1
// 2
// 3

map

์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.  ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐ’์„ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ ์ ํ•ฉํ•˜๋‹ค.

let array = [1, 2, 3];
let doubleArray = array.map((item) => {
  return item * 2;
});

console.log(doubleArray);
//[2, 4, 6]

filter

๋ฐฐ์—ด์˜ ์š”์†Œ ์ค‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๋“ค๋งŒ ํ•„ํ„ฐ๋ง ํ•ด ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • return ๊ฐ’์€ true/false๋กœ ํŒ๋ณ„๋˜๊ณ , true์ธ ๊ฐ’๋งŒ ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.
let array = [1, 2, 3];
let odd = array.filter((item) => {
  return item % 2;
});

console.log(even);
// [1, 3]

reduce

๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ฐ˜๋ณต์ ์ธ ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

๋‘ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

๋ฐฐ์—ด.reduce((๊ฒฐ๊ณผ ๋ณ€์ˆ˜,  ํ˜„์žฌ ์š”์†Œ,  ํ˜„์žฌ ์š”์†Œ index,  ํ˜„์žฌ ๋ฐฐ์—ด)=>{return ;}, ์ดˆ๊ธฐ ๊ฐ’)
  • ์ฝœ๋ฐฑํ•จ์ˆ˜
    • ๊ฒฐ๊ณผ ๋ณ€์ˆ˜  : ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ๊ฐ’์ด ์ด ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋œ๋‹ค. (๋ˆ„์ ๋œ๋‹ค.)
    • ํ˜„์žฌ ์š”์†Œ  : ํ˜„์žฌ ํƒ์ƒ‰ํ•˜๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ
    • ํ˜„์žฌ ์š”์†Œ index  : ํ˜„์žฌ ํƒ์ƒ‰ํ•˜๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ์˜ ์ธ๋ฑ์Šค (์ƒ๋žต ๊ฐ€๋Šฅ)
    • ํ˜„์žฌ ๋ฐฐ์—ด  : ํ˜„์žฌ ํƒ์ƒ‰ํ•˜๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด (์ƒ๋žต ๊ฐ€๋Šฅ)
  • ์ดˆ๊ธฐ ๊ฐ’  : ๊ฒฐ๊ณผ ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐ ๊ฐ’์„ ์ง€์ •ํ•œ๋‹ค. ์ƒ๋žต๋˜๋ฉด ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค.
let array = [1, 2, 3];
let cumulativeValue = array.reduce((sum, curr, currIdx, array) => {
  return sum + curr;
}, 0);

console.log(cumulativeValue);
// 6

 

โœ…๋ฆฌ์ŠคํŠธ ์•ˆ์— ์žˆ๋Š” ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‘์šฉ

const fruits = ["Orange", "Orange", "Apple", "Apple", "Pear", "Banana"];
const states = fruits.reduce((box, fruit) => {
  return { ...box, [fruit]: (box[fruit] || 0) + 1 };
  // Spread Syntax(...) ์‚ฌ์šฉ : ๊ธฐ์กด ๊ฐ์ฒด(box)์˜ ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•จ.
}, {});

console.log(states);
// {Orange: 2, Apple: 2, Pear: 1, Banana: 1}


โœ…์—ฌ๋Ÿฌ ๋ฐฐ์—ด์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๋Š” ์‘์šฉ

const alphabet = [
  ["a", "b", "c", "d"],
  ["e", "f", "g"],
  ["h", "i"],
];
const flattened = alphabet.reduce((sumArr, currArr) => prev.concat(currArr));

console.log(flattened);
// ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

+ reduceRight

๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ์ˆœํšŒ