IT EDU/JAVA SCRIPT

[JavaScript] map, reduce ๋ฉ”์†Œ๋“œ

yoonhoou 2022. 3. 23.
728x90

 

๐Ÿ’ป 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๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ’ ํ•˜๋‚˜๋Š” ๊ฐ์ฒด์ผ ์ˆ˜๋„ ์žˆ๊ณ , ๋‹ค๋ฅธ ๋ฐฐ์—ด์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋Š” ๋„ค ๊ฐœ์˜ ์ธ์ž๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

  1. ๋ˆ„์‚ฐ๊ธฐaccumulator (acc)
  2. ํ˜„์žฌ ๊ฐ’ (cur)
  3. ํ˜„์žฌ ์ธ๋ฑ์Šค (idx)
  4. ์›๋ณธ ๋ฐฐ์—ด (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

๋Œ“๊ธ€