[JS] ๐ ์๋ฐ์คํฌ๋ฆฝํธ 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' ์์๊ฐ ๋น ์ ธ์๋ ์ด์ ์ด๋ค!