Language/JavaScript

[JS] ๐Ÿ“š ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ map ๊ณผ filter ์ฐจ์ด

์ธํŒŒ_ 2021. 9. 29. 00:29

map-filter

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ map() / filter() ํ•จ์ˆ˜

๋‘˜์€ ๋งค์šฐ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฒผ๋‹ค. ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์ธ์ž๋„ ๊ฑฐ์˜ ๋˜‘๊ฐ™๊ณ  ์ƒ๊น€์ƒˆ๋„ ์™„์ „ ํŒ๋ฐ•์ด๋ผ ํ• ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ๊ฐ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ดํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅด๋‹ค๊ณ  ๋ณผ์ˆ˜ ์žˆ๋‹ค.

 

map()

callback ํ•จ์ˆ˜๋ฅผ ๊ฐ๊ฐ์˜ ์š”์†Œ์— ๋Œ€ํ•ด ํ•œ๋ฒˆ์”ฉ ์ˆœ์„œ๋Œ€๋กœ ๋ถˆ๋Ÿฌ ๊ทธ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑ

arr.map(callback(currentValue[, index[, array]])[, thisArg])

callback : ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜. ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ๊ฐ€์ง

  • currentValue : ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ
  • index (Optional) : ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ์˜ ์ธ๋ฑ์Šค
  • array (Optional) : map()๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด
  • thisArg (Optional) : callback์„ ์‹คํ–‰ํ•  ๋•Œ this๋กœ ์‚ฌ์šฉํ•  ๊ฐ’

filter()

์ฃผ์–ด์ง„ ํ•จ์ˆ˜์˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋ชจ์•„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

arr.filter(callback(element[, index[, array]])[, thisArg])

callback : ๊ฐ ์š”์†Œ๋ฅผ ์‹œํ—˜ํ•  ํ•จ์ˆ˜. true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์š”์†Œ๋ฅผ ์œ ์ง€ํ•˜๊ณ , false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฒ„๋ฆผ. ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ์ธ์ˆ˜๋ฅผ ๊ฐ€์ง

  • element : ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ
  • index (Optional) : ์ฒ˜๋ฆฌํ•  ํ˜„์žฌ ์š”์†Œ์˜ ์ธ๋ฑ์Šค
  • array (Optional) : filter()๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฐ์—ด
  • thisArg (Optional) : callback์„ ์‹คํ–‰ํ•  ๋•Œ this๋กœ ์‚ฌ์šฉํ•  ๊ฐ’

ํ•œ๋ˆˆ์— ์ดํ•ดํ•˜๋Š” map() vs filter() ์ฐจ์ด์ 

์ด ๋‘˜์˜ ์ฐจ์ด๋ฅผ ํ€ด์ฆˆ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด์ž.

โ€‹

Q. [0,1,2,3,4,5] ๋ฐฐ์—ด์ด ์žˆ๊ณ  ์ด์ค‘์—์„œ 2๋ณด๋‹ค ์ž‘์€ ์ธ์ž๊ฐ’๋งŒ ๊ตฌ์„ฑ๋œ ๋ฐฐ์—ด์„ ์–ป์–ด๋ผ

var testArray = [0,1,2,3,4,5];

testArray.filter(function(c){ return c <= 2; }); // [0, 1, 2]

testArray.map(function(c){ return c <= 2 }); // [true, true, true, false, false, false]

testArray.map(function(c){
    if (c <= 2)
        return c;
}) // [0, 1, 2, undefined, undefined, undefined] ๋นˆ๊ฐ’์„ ์ œ๊ฑฐํ•˜๊ธฐ์œ„ํ•ด์„  ์•„์ด๋Ÿฌ๋‹ˆํ•˜๊ฒŒ๋„ filter์„ ์จ์•ผํ•œ๋‹ค.

์™œ filter์™€ map์€ ๋˜‘๊ฐ™์€ ์ฝ”๋“œ์ž„์— ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์ด ์ฐจ์ด๊ฐ€ ๋‚˜๋Š”๊ฑธ๊นŒ?

๊ทธ๊ฒƒ์€ ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์—ญํ• ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

map์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜๋Š” ์‚ฐ์ˆ ๋œ ์ธ์ž๋ฅผ ๋ฐ›์•„ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ c <= 2๋ฅผ ๋ฐ›์œผ๋ฉด ๊ทธ ์‚ฐ์ˆ  ๊ฒฐ๊ณผ์ธ ๋ถˆ๋ฆฌ์–ธ๊ฐ’์„ ๋ฆฌํ„ดํ•ด ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

โ€‹

filter์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋ฆฌํ„ด๊ฐ’์˜ ๋ถˆ๋ฆฌ์–ธ์ด true์ธ ๊ฐ’๋งŒ ๊ฐ€์ง€๊ณ  ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ์—ญํ• ์€ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ c <= 2์—์„œ c๊ฐ’์— ๋”ฐ๋ผ ์ € ์กฐ๊ฑด์‹์ด true๋ฉด, c๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

โ€‹์ด๋ฒˆ์—” ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋ฅผ ๋ณด์ž. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ด ์•„๋‹Œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ์ฃผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

 

 

Q. [0,1,2,3,4,5] ๋ฐฐ์—ด์ด ์žˆ๊ณ  ์ธ์ž๊ฐ’์„ ๋‘๋ฐฐ ๋Š˜๋ฆฐ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์„ ์–ป์–ด๋ผ

var testArray = [0,1,2,3,4,5];

testArray.filter(function(c){ return c * 2; }); // [1, 2, 3, 4, 5]

testArray.map(function(c){ return c * 2 }); // [0, 2, 4, 6, 8, 10]

map์€ ์‚ฐ์ˆ ๋œ ๊ฐ’์„ ๋ฆฌํ„ด, ์ฆ‰ c * 2๋ฅผ ์‚ฐ์ˆ ํ•ด์„œ ๋ฐฐ์—ด์— ๋„ฃ์–ด ๋งŒ๋“œ๋‹ˆ๊นŒ ์›ํ•˜๋Š” ๋‹ต์„ ์–ป์„์ˆ˜ ์žˆ๋‹ค.

โ€‹

ํ•˜์ง€๋งŒ, filter์€ c * 2๋ฅผ ์‚ฐ์ˆ ์ด ์•„๋‹Œ ๋…ผ๋ฆฌ๋กœ ๋ณธ๋‹ค. c * 2๋Š” ๋ญ˜ํ•ด๋„ ์ฐธ์ด๋‹ค.

๋”ฑ ํ•œ๊ฐ€์ง€๋งŒ ์ œ์™ธํ•˜๊ณ  ๋ง์ด๋‹ค.

๋ฐ”๋กœ c์— 0๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฉด 0์ด ๋˜๋‹ˆ๊นŒ, 0์€ fasle.

๊ทธ๋ž˜์„œ ์œ„ filter()์˜ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— '0' ์›์†Œ๊ฐ€ ๋น ์ ธ์žˆ๋Š” ์ด์œ ์ด๋‹ค!

 

map-filter
https://juejin.cn/post/7114604944900128804