[๐Ÿฑ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๊ณ ์ฐจํ•จ์ˆ˜์™€ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ(map, reduce, filter)

dsfasdยท2022๋…„ 9์›” 20์ผ
0

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณ ์ฐจํ•จ์ˆ˜๋ž€?


๐ŸŽ ๊ณ ์ฐจํ•จ์ˆ˜๋ž€?

ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰ ๊ฐ์ฒด์ด๋‹ค.
๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๊ณ , ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ์ธ์ž๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ <ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜>, <ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜>๋ฅผ ๋ชจ๋‘ ๊ณ ์ฐจํ•จ์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์˜ˆ์ œ

function returnFunction() {
  return function printHello (){ 
    return 'Hello!';
  }
}

returnFunction์€ ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋ฏ€๋กœ ๊ณ ์ฐจํ•จ์ˆ˜์˜ ํ•œ ์˜ˆ์ด๋‹ค.


๐ŸŽ ์ฝœ๋ฐฑํ•จ์ˆ˜ -> ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ๋ฐฐ์—ด ๊ณ ์ฐจํ•จ์ˆ˜์— ์‚ฌ์šฉ

๊ณ ์ฐจํ•จ์ˆ˜ ์‚ฌ์šฉ์‹œ <๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ „๋‹ฌ ์ธ์ž>๊ฐ€ ๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜๋Š” ์ปค๋ง ํ•จ์ˆ˜ ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ํ•œ๋‹ค. (์šฉ์–ด๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.)

์˜ˆ์ œ

function compose(func1, func2) {
  return function(num){
    return func1(func2(num));
  }
}

func1๊ณผ func2๋Š” compose ํ•จ์ˆ˜์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋ฏ€๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜์— ํ•ด๋‹นํ•œ๋‹ค.


๐ŸŽ ๋‚ด์žฅ ๊ณ ์ฐจ ํ•จ์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ๋‚ด์žฅ๋œ ๊ณ ์ฐจํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ๋Œ€๋ถ€๋ถ„ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๊ฐ€ ์ด์— ํ•ด๋‹นํ•œ๋‹ค.
๋ฐฐ์—ด ๋ฉ”์„œ๋“œ์—๋Š” filter , map , reduce ๋“ฑ์ด ์žˆ๋‹ค.

filter ๋ฉ”์„œ๋“œ

-> "true์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋งŒ ์ถ”์ถœ"ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์ž

  • ๊ธฐ๋Šฅ : ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑ( true )ํ•˜๋Š” ์š”์†Œ๋ฅผ ์ถ”์ถœ.
  • ๊ธฐ๋ณธ ํ˜•ํƒœ : arr.filter(callback)
    ์ด๋•Œ ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด ํ•จ์ˆ˜๊ฐ€ filter ๋ฉ”์„œ๋“œ์˜ ์ „๋‹ฌ ์ธ์ž์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ ๊ณ ์ฐจํ•จ์ˆ˜์ด๋‹ค.

filter ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ์˜ˆ์‹œ

function removeElement(arr, discarder) {
   return arr.filter(function (el) {
     if (el !== discarder) {
       return true; //true์ธ ์š”์†Œ๋งŒ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
     }
     return false;
   });
  // ์œ„ if๋ฌธ์€ 
  // return el !== discarder ์™€ ๋™์ผ
 }

์ฝœ๋ฐฑํ•จ์ˆ˜์—์„œ ๋ฐฐ์—ด ๊ฐ’์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ ๊ฒฝ์šฐ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

map ๋ฉ”์„œ๋“œ

  • ๊ธฐ๋Šฅ : ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ ํ•  ๋•Œ ์‚ฌ์šฉ
  • ๊ธฐ๋ณธ ํ˜•ํƒœ : arr.map(callback)

map ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ์˜ˆ์‹œ

const nums = [1,2,3,4,5]
function addPlusOne(nums){
  return nums.map(function(element){
    return element + 1;
  })
}
console.log(nums) // [2, 3, 4, 5, 6]

reduce ๋ฉ”์„œ๋“œ

  • ๊ธฐ๋Šฅ : ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๊ฐ’ ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    ( ex. ๋ฐฐ์—ด์˜ ๋ง์…ˆ/๋บ„์…ˆ ,์ตœ๋Œ€/์ตœ์†Œ, ๋ฐฐ์—ด์„ ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅ ๋“ฑ )
  • ๊ธฐ๋ณธ ํ˜•ํƒœ :โ€จ arr.reduce(callback[, initialValue])
  • ํŠน์ง•
    - reduce ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ accumulator, currentValue, currentIndex, array๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

reduce ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ์˜ˆ์‹œ

const nums = [1,2,3,4,5]
function sum(num){
  return nums.reduce(function(acc,cur){
    return acc + cur
  },0) //ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
}
console.log(nums) // 15

profile
๊ธฐ๋ก์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„!

0๊ฐœ์˜ ๋Œ“๊ธ€