๐ป map() ๋ฉ์๋
arr.map(callback(currentValue[, index[, array]])[, thisArg])
๋งค๊ฐ๋ณ์
callback : ์๋ก์ด ๋ฐฐ์ด ์์๋ฅผ ์์ฑํ๋ ํจ์. ๋ค์ ์ธ ๊ฐ์ง ์ธ์๋ฅผ ๊ฐ์ง๋๋ค.
-currentValue : ์ฒ๋ฆฌํ ํ์ฌ ์์
-index(optional : ์ฌ์ฉํด๋ ๋๊ณ ์ํด๋ ๋๊ณ ) : ์ฒ๋ฆฌํ ํ์ฌ ์์์ ์ธ๋ฑ์ค
-array(optional : ์ฌ์ฉํด๋ ๋๊ณ ์ํด๋ ๋๊ณ ) : map()์ ํธ์ถํ ๋ฐฐ์ด
-thisArg(optional : ์ฌ์ฉํด๋ ๋๊ณ ์ํด๋ ๋๊ณ ) : callback์ ์คํํ ๋this๋ก ์ฌ์ฉ๋๋ ๊ฐ
๋ฐํ๊ฐ
๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์คํํ callback์ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด.
map() ๋ฉ์๋๋ ๋ฐฐ์ด ๋ด์ ๋ชจ๋ ์์ ๊ฐ๊ฐ์ ๋ํ์ฌ ์ฃผ์ด์ง ํจ์๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํฉ๋๋ค.
๊ฐ๋จํ ์๋ก ์ฃผ์ด์ง ๋ฐฐ์ด์ ์์๋ค์ ๊ณฑํ๊ธฐ 2 ํ์ฌ ๋ฐํํ๋ ์์ ๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
const array = [1, 4, 9, 16];
const map = array.map(function(currentValue, /* index, array */){
return currentValue*2;
});
//ES6์ ํ์ดํ ํจ์๋ก ํ๊ธฐํ๊ฒ ๋๋ฉด
//const map = array.map(currentValue => currentValue*2);
console.log(array);
//[1, 4, 9, 16]
console.log(map);
//[2, 8, 18, 32]
map์ callback ํจ์๋ฅผ ๊ฐ๊ฐ์ ์์์ ๋ํด ํ๋ฒ์ฉ ์์๋๋ก ๋ถ๋ฌ ๊ทธ ํจ์์ ๋ฐํ๊ฐ์ผ๋ก ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ญ๋๋ค.
map์ ํธ์ถํ ๋ฐฐ์ด์ ๊ฐ์ ๋ณํํ์ง ์์ต๋๋ค. ๋จ, callback ํจ์์ ์ํด์ ๋ณํ๋ ์๋ ์์ต๋๋ค.
ex1) map์ ํ์ฉํด ๋ฐฐ์ด ์ ๊ฐ์ฒด๋ฅผ ์ฌ๊ตฌ์ฑํ๊ธฐ
var kvArray = [{key:1, value:10},
{key:2, value:20},
{key:3, value: 30}];
var reformattedArray = kvArray.map(function(obj){
var rObj = {};
rObj[obj.key] = obj.value;
return rObj;
});
// reformattedArray
//[{1:10}, {2:20}, {3:30}]
// kvArray
// [{key:1, value:10},
// {key:2, value:20},
// {key:3, value: 30}]
ex2) map์ ํฌ๊ด์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ
var map = Array.prototype.map;
var a = map.call('Hello World', function(x) {
//charCodeAt์ ์ฃผ์ด์ง index์ ํด๋นํ๋ ์ ๋์ฝ๋ ๊ฐ์ ๋ฆฌํดํ๋๋ฐ
//์ด ๊ฐ์ unicode๊ฐ ์ง์๋๋ ๋ชจ๋ ์์คํ
์์ ๋์ผํ ๋ฌธ์๋ฅผ ๊ฐ๋ฅดํจ๋ค.
return x.charCodeAt(0);
});
//[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
ex3) map์ ํฌ๊ด์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ (querySelectorAll)
querySelectorAll์ ์ฌ์ฉํด์ ์์ง๋ ๊ฐ์ฒด๋ค์ ์ํ ์ฒ๋ฆฌํ๋ ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
์ด๋ฒ ๊ฒฝ์ฐ ์ฒดํฌํ ์ต์ ๋ฐ์ค๋ฅผ ์ฝ์์ ํ๋ฆฐํธํฉ๋๋ค.
var elems = document.querySelectorAll('select option:checked');
var values = [].map.call(elems, function(obj) {
return obj.value;
});
๐ป reduce() ๋ฉ์๋
reduce() ๋ฉ์๋๋ ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฃผ์ด์ง ๋ฆฌ๋์(reducer) ํจ์๋ฅผ ์คํํ๊ณ , ํ๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํฉ๋๋ค.
map์ด ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ๋ณํํ๋ค๋ฉด reduce๋ ๋ฐฐ์ด ์์ฒด๋ฅผ ๋ณํํฉ๋๋ค. reduce๋ผ๋ ์ด๋ฆ์ ์ด ๋ฉ์๋๊ฐ ๋ณดํต ๋ฐฐ์ด์ ๊ฐ ํ๋๋ก ์ค์ด๋ ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ถ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ์ด์ ๋ค์ด์๋ ์ซ์๋ฅผ ๋ํ๊ฑฐ๋ ํ๊ท ์ ๊ตฌํ๋ ๊ฒ์ ๋ฐฐ์ด์ ๊ฐ ํ๋๋ก ์ค์ด๋ ๋์์ ๋๋ค. ํ์ง๋ง reduce๊ฐ ๋ฐํํ๋ ๊ฐ ํ๋๋ ๊ฐ์ฒด์ผ ์๋ ์๊ณ , ๋ค๋ฅธ ๋ฐฐ์ด์ผ ์๋ ์์ต๋๋ค.
๋ฆฌ๋์ ํจ์๋ ๋ค ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง๋๋ค.
- ๋์ฐ๊ธฐaccumulator (acc)
- ํ์ฌ ๊ฐ (cur)
- ํ์ฌ ์ธ๋ฑ์ค (idx)
- ์๋ณธ ๋ฐฐ์ด (src)
๋ฆฌ๋์ ํจ์์ ๋ฐํ ๊ฐ์ ๋์ฐ๊ธฐ์ ํ ๋น๋๊ณ , ๋์ฐ๊ธฐ๋ ์ํ ์ค ์ ์ง๋๋ฏ๋ก ๊ฒฐ๊ตญ ์ต์ข ๊ฒฐ๊ณผ๋ ํ๋์ ๊ฐ์ด ๋ฉ๋๋ค.
arr.reduce(callback[, initialValue])
๋งค๊ฐ๋ณ์
callback : ๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์คํํ ํจ์. ๋ค์ ๋ค ๊ฐ์ง ์ธ์๋ฅผ ๋ฐ์ต๋๋ค
-accumulator : ๋์ฐ๊ธฐaccmulator๋ ์ฝ๋ฐฑ์ ๋ฐํ๊ฐ์ ๋์ ํฉ๋๋ค. ์ฝ๋ฐฑ์ ์ด์ ๋ฐํ๊ฐ ๋๋, ์ฝ๋ฐฑ์ ์ฒซ ๋ฒ์งธ ํธ์ถ์ด๋ฉด์ initialValue๋ฅผ ์ ๊ณตํ ๊ฒฝ์ฐ์๋initialValue์ ๊ฐ์ ๋๋ค.
-currentValue : ์ฒ๋ฆฌํ ํ์ฌ ์์.
-currentIndex(optional : ์ฌ์ฉํด๋ ๋๊ณ ์ํด๋ ๋๊ณ ) : ์ฒ๋ฆฌํ ํ์ฌ ์์์ ์ธ๋ฑ์ค. initialValue๋ฅผ ์ ๊ณตํ
๊ฒฝ์ฐ 0, ์๋๋ฉด 1๋ถํฐ ์์ํฉ๋๋ค.
-array(optional : ์ฌ์ฉํด๋ ๋๊ณ ์ํด๋ ๋๊ณ ) : reduce()๋ฅผ ํธ์ถํ ๋ฐฐ์ด.
initialValue(optional : ์ฌ์ฉํด๋ ๋๊ณ ์ํด๋ ๋๊ณ ) : callback์ ์ต์ด ํธ์ถ์์ ์ฒซ ๋ฒ์งธ ์ธ์์ ์ ๊ณตํ๋ ๊ฐ. ์ด๊ธฐ๊ฐ์ ์ ๊ณตํ์ง ์์ผ๋ฉด ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋น ๋ฐฐ์ด์์ ์ด๊ธฐ๊ฐ ์์ด reduce()๋ฅผ ํธ์ถํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฐํ๊ฐ
๋์ ๊ณ์ฐ์ ๊ฒฐ๊ณผ ๊ฐ.
'IT EDU > JAVA SCRIPT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] JavaScript ๊ธฐ์ด (0) | 2022.03.21 |
---|---|
[JavaScript] JavaScript ํ๊ฒฝ ์ค์ (0) | 2022.03.21 |
๋๊ธ