JavaScript

[JavaScript] ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ(Map,Filter,Reduce,Find,ForEach)

joheamin 2025. 2. 5. 16:05

๐Ÿ”ท Map

์ฃผ์–ด์ง„ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์žฌ์ •์˜ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ์ธ๋ฑ์Šค ์ˆœ์œผ๋กœ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ callbackํ•จ์ˆ˜๋กœ ๋ฐ˜ํ™˜ ๋ฐ›์•„ ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ •์˜ํ•œ๋‹ค.

  let money = [1, 2, 3, 4];
  
  console.log(money);
    result = money.map((m) => m + m * 0.5);
    console.log(result);

 

๐Ÿ‘‰ money์˜ ์š”์†Œ๊ฐ€ m ์ธ์ž๋ฅผ ํ†ตํ•ด ์ธ๋ฑ์Šค ์ˆœ์œผ๋กœ ์ „๋‹ฌ๋˜์–ด ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ฐ’์ด result์— ๋ฐฐ์—ด ์š”์†Œ๋กœ ํ• ๋‹น

 

๐Ÿ”น map์˜ callBack ์ธ์ž

์ธ์ž ์œ„์น˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค.

map ((์š”์†Œ์˜ ๊ฐ’, index , ์ˆœํšŒํ•˜๋Š” ๋Œ€์ƒ)

    result = money.map((m, i, s) => {
      document.write(`<br> ${i}๋ฒˆ์จฐ ์š”์†Œ ๊ฐ’: ${m} ์ „์ฒด : ${s}`);
    });
    console.log(result);

 


โš ๏ธ map ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ

  • map ์ฝœ๋ฐฑํ•จ์ˆ˜ ๋‚ด์—์„œ push๋œ data : ์ ์šฉ ์•ˆ๋Œ
  • map ์ฝœ๋ฐฑํ•จ์ˆ˜ ๋‚ด์—์„œ pop๋œ data : ์ ์šฉ ๋Œ

์ƒˆ ๋ฐฐ์—ด์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ ์ง์ ‘ ์ถ”๊ฐ€ ๋˜๋Š” ๋ฐฐ์—ด์—๋Š” ์ ์šฉ์ด ๋œ๋‹ค.

 

์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ push ๋ฐ˜์˜

    result = money.map((m) => {
      money.push(123);
      return m * m;
    });
    

๐Ÿ‘‰ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์—๋Š” push๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š”๋‹ค.

๋‹ค๋งŒ money์—๋Š” push๊ฐ€ ๋ฐ˜์˜๋œ๋‹ค.

 

 

์ฝœ๋ฐฑํ•จ์ˆ˜์— pop() ์ ์šฉ

    // money : [30, 50, 100, 120, 123, 123, 123, 123]
    
    result = money.map((m) => {
      money.pop();
      return m * m;
    });
    
    console.log(result);    //[900, 2500, 10000, 14400]      
    console.log(money);     //[30, 50, 100, 120]

๐Ÿ‘‰ ์ฝœ๋ฐฑํ•จ์ˆ˜ ๋‚ด์—์„œ pop()์ด ๋ฐ˜์˜๋˜์–ด ์ง€์›Œ์ง„ ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 


๐Ÿ”ท Fillter

๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ œ๊ณต๋œ callbackFn ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ํ˜ธ์ถœํ•˜๊ณ ,

์กฐ๊ฑด์— ์„ฑ๋ฆฝํ•  ๊ฒฝ์šฐ ์ƒˆ ๋ฐฐ์—ด์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ ํ•œ๋‹ค.

    result = words.filter((m) => {
      if (m.length >= 5) return m;
    });

    console.log(result);  

๐Ÿ‘‰ ๊ธธ์ด๊ฐ€ 5 ์ด์ƒ์ธ ๋ฌธ์ž์—ด๋กœ ๋ฐฐ์—ด ์ฑ„์›Œ์ง

๐Ÿ’ก ๋งŒ์•ฝ ํ•„ํ„ฐ์˜ ์žฌ ์‚ฌ์šฉ์„ฑ์ด ๋†’์€ ๊ฒฝ์šฐ function์„ ์ž‘์„ฑํ•ด๋†“๊ณ  ์‚ฌ์šฉ

callBackํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ๋Š” () ์ œ์™ธํ•˜๊ณ  ์ด๋ฆ„๋งŒ ๋„ฃ์–ด๋„ ๋œ๋‹ค.

filter๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ธ๋ฑ์Šค ์ˆœ์œผ๋กœ ์š”์†Œ๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค.

    function lengthCheck(i) {
      if (i.length >= 5) return i;
    }

    result = words.filter(lengthCheck);

    console.log(result);

๐Ÿค” map() ์œผ๋กœ๋Š” ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ถœ๋ ฅ์ด ์•ˆ๋ ๊นŒ?

    function lengthCheck(i) {
      console.log(i);
      if (i.length >= 5) return i;
    }
    
    result = words.map(lengthCheck);
    console.log(result);

๐Ÿ‘‰ ์กฐ๊ฑด์— ๋งž๋Š” ๋ฌธ์ž์—ด์ด ๋ฐ˜ํ™˜๋˜๊ธฐ๋Š” ํ•˜๋‚˜

์กฐ๊ฑด์— ๋งž์ง€ ์•Š์•„ ๋ฐ˜ํ™˜ ๋ฐ›์ง€ ๋ชปํ•œ ์š”์†Œ์˜ ๋นˆ์ž๋ฆฌ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ undefined๋กœ ์ฑ„์›Œ์ง€๊ฒŒ๋œ๋‹ค.


๐Ÿ”ท reduce()

๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด์„œ ์ฝœ๋ฐฑํ•จ์ˆ˜ ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ๋ˆ„์ ํ•˜์—ฌ

๋‹จ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

reduce(a , c)

  • a ์ธ์ž : accumulator๋กœ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ˆ„์  ๋ณด๊ด€ํ•œ๋‹ค.
  • c ์ธ์ž : currentValue , ์ฐจ๋ก€๋Œ€๋กœ ์ „๋‹ฌ ๋˜๋Š” ๋ฐฐ์—ด์˜ ๊ฐ’
  • ์ดˆ๊ธฐ๊ฐ’ ์ƒ๋žต ๊ฐ€๋Šฅ ( ์ƒ๋žตํ•  ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋กœ ์‹œ์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.)

์˜ˆ์ œ

  • ์ดˆ๊ธฐ๊ฐ’์€ 0์œผ๋กœ ํ•˜์—ฌ money์˜ ๊ฐ’๋“ค์„ ๋ˆ„์ ํ•œ๋‹ค.

a ์—๋Š” ๋”ํ•ด์ง„ ๊ฐ’๋“ค์ด += ์—ฐ์‚ฐ๋˜์–ด ๋ˆ„์ ๋˜๊ณ 

c์—๋Š” ์š”์†Œ๋“ค์ด ์ธ๋ฑ์Šค ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ๋˜์–ด ์—ฐ์‚ฐ๋œ๋‹ค.

    result = money.reduce((a, c) => {
      console.log(a, c);
      return a + c;
    }, 0);

    console.log(result);

๐Ÿ‘‰ ๊ฒฐ๊ณผ์ ์œผ๋กœ result์— ๋ชจ๋‘ ๋ˆ„์ ๋œ ๊ฐ’์ด ์ €์žฅ


๐Ÿ”น ๊ฐ์ฒด ๋ฐฐ์—ด์—์„œ์˜ ํ•ฉ์‚ฐ

  • ๊ฐ์ฒด ๋ฐฐ์—ด ์ƒ์„ฑ
    let sumObj = [
      { x: 1, y: 10 },
      { a: 100, b: 200 },
      { q: 50, w: 30 },
    ];
  • ์ดˆ๊ธฐ๊ฐ’์„ 0์œผ๋กœ ํ•˜๊ณ  ๊ฐ์ฒด ์š”์†Œ๋“ค์˜ ๊ฐ’์„ ๋ˆ„์ 
    result = sumObj.reduce((a, c) => a + c.x + c.y, 0);
  • ๊ฒฐ๊ณผ
    console.log(result);

๐Ÿ‘‰ 391 (๋ˆ„์ ๋œ ๊ฐ’)


๐Ÿ”ท find

์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์ฐธ์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ๊นŒ์ง€ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๋ฐ˜ํ™˜์ด ๋˜๋ฉด ์ค‘์ง€ํ•˜๊ณ 

ํ•ด๋‹น ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ์—†์–ด ๋ฐ˜ํ™˜ ํ•˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿค” filter์™€ ๋‹ค๋ฅธ์ ?

filter๋Š” ์กฐ๊ฑด์— ๋งž๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋‹ค ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ˜๋ฉด

find๋Š” ์กฐ๊ฑด์— ๋งž๋Š” ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์ƒ๊ธฐ๋ฉด ๊ทธ ํ•˜๋‚˜๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค.

์˜ˆ์ œ

  • ๋ฐฐ์—ด ์ƒ์„ฑ
    const inventory = [
      { name: "apple", quantity: 10 },
      { name: "banana", quantity: 20 },
      { name: "grape", quantity: 30 },
      { name: "mango", quantity: 40 },
      { name: "melon", quantity: 50 },
    ];
  • fruit๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„์™€true ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฐ”๋กœ ์ˆœํšŒ ์ข…๋ฃŒ
  • fruit์˜ name ์†์„ฑ์ด ‘melon’ ์ด๋ผ๋ฉด true ๋ฐ˜ํ™˜
    result = inventory.find((fruit) => fruit.name == "melon");

๐Ÿ’ก ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ

    result = inventory.find(({ name }) => name == "melon");

๐Ÿ‘‰ let {name} = inventory.๊ฐ์ฒด ์ธ ์…ˆ์ด๋‹ค


๐Ÿ”ท forEach()

๋ฐฐ์—ด์— ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ œ๊ณต๋œ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ธ๋ฑ์Šค ์ˆœ์„œ๋กœ ํ•œ ๋ฒˆ์”ฉ ํ˜ธ์ถœํ•œ๋‹ค.

๐Ÿค” map์ด๋ž‘ ์ฐจ์ด์ ์ด ๋ญ˜๊นŒ?

forEach๋Š” return ์ด ์—†์–ด undefined๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰์„ ํ•˜๊ณ  ๋‚˜์„œ๋„ ์ถ”๊ฐ€๋กœ ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ์™€ ๋‹ค๋ฅด๊ฒŒ map์€ ๋ฐ˜ํ™˜ ๋˜๋Š” ๊ฐ’์„ ๋ฐ›์•„์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

โ“ map์—์„œ return ์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด?

    result = words.map((m) => {
      console.log(m);
    });

    console.log(result);

๐Ÿ‘‰ ๊ฐ๊ฐ์˜ ์š”์†Œ๊ฐ€ ์ถœ๋ ฅ์€ ๋˜์ง€๋งŒ ๋นˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜์–ด result๋Š” ๋นˆ ๋ฐฐ์—ด์ด ๋œ๋‹ค.

  • forEach๋กœ ๋ฐ›์•„๋ณด๋ฉด?
    result = words.forEach((m) => {
      console.log(m);
    });

    console.log(result);

๐Ÿ‘‰ ์š”์†Œ๋Š” ์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅ ๋˜๋ฉฐ, result๋Š” undefined ๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿค”forEach๋Š” ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

์•ž์„œ ์ž‘์—…์„ ํ•œ ๋’ค ๊ฒฐ๊ณผ๋ฌผ์„ ์ถœ๋ ฅํ•˜๋Š” ๋งˆ๋ฌด๋ฆฌ ๋ฉ”์„œ๋“œ๋กœ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 


๐Ÿ’ก ์ƒํ™ฉ๋ณ„ ๋ฉ”์„œ๋“œ ์ •๋ฆฌ

1. ์ƒˆ๋กœ์šด ๊ฐ’์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ⇒ map

2. ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๋“ค๋กœ๋งŒ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ⇒ filter

3. ๋ˆ„์ ๋œ ๊ฒฐ๊ณผ ๊ฐ’ ๋”ฑ ํ•˜๋‚˜๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ⇒ reduce

4. ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ ๋”ฑ ํ•˜๋‚˜๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ์ข…๋ฃŒ ์‹œํ‚ค๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ

⇒ find

5. ์ถœ๋ ฅ๋งŒ ํ•  ๊ฒฝ์šฐ ⇒ forEach