๐Ÿ“ŒLanguage/JavaScript

TIL) ๊ณ ์ฐจํ•จ์ˆ˜, ๋‚ด์žฅ๊ณ ์ฐจํ•จ์ˆ˜, map, filter, reduce

hellohailie 2022. 5. 25. 00:31


์ผ๊ธ‰๊ฐ์ฒด

  1. ๋ณ€์ˆ˜์— ํ• ๋‹น ๊ฐ€๋Šฅ // (ํ•จ์ˆ˜ ํ‘œํ˜„์‹ & ํ•จ์ˆ˜ ์„ ์–ธ์‹ ๋ชจ๋‘ ๊ฐ€๋Šฅ)
  2. ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ „๋‹ฌ์ธ์ž๋กœ ์ „๋‹ฌ ๊ฐ€๋Šฅ // ์ฝœ๋ฐฑํ•จ์ˆ˜ = ํ•จ์ˆ˜์— ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜.
  3. ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋กœ์„œ ๋ฆฌํ„ด ๊ฐ€๋Šฅ (ํ•จ์ˆ˜๊ฐ€ ์ผ๊ธ‰๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— ํด๋กœ์ ธ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ๊ฑฐ์˜€๋‹ค. )

=> ๋ฌธ์ž์—ด, ์ˆซ์ž ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ!
==> js์—์„œ ํ•จ์ˆ˜๋Š” ์ผ๊ธ‰๊ฐ์ฒด!!

์ปค๋งํ•จ์ˆ˜ = ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜.



๊ณ ์ฐจํ•จ์ˆ˜
ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด์˜ ์š”์†Œ๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ๊ฐ’์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•จ์ˆ˜๊ฐ€ ์ผ๊ธ‰๊ฐ์ฒด๋ผ์„œ ๊ณ ์ฐจํ•จ์ˆ˜๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ๊ฑฐ๋‹ค!

  • ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌ์ธ์ž๋กœ ๋ฐ›๋Š” ํ•จ์ˆ˜
  • ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜



์ฝœ๋ฐฑํ•จ์ˆ˜
๋น„๋™๊ธฐ์—์„œ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

์ปค๋งํ•จ์ˆ˜
์ปค๋งํ•จ์ˆ˜๋•Œ๋ฌธ์— ํด๋กœ์ €๊ฐ€ ๋‚˜์˜จ๊ฑฐ๋‹ค.
๊ฑฐ์˜ ๊ฐ™๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.





๋ฐฐ์—ด ๋‚ด์žฅ ๋งค์„œ๋“œ

  1. map
  2. filter
  3. reduce
  4. ๊ธฐํƒ€ ๋“ฑ๋“ฑ


=========
**๋–ก๋ฐฅ**
๋ฉ”์„œ๋“œ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?
(๊ฐ์ฒด ์•ˆ์˜ ํ•จ์ˆ˜๋‹ค.)

ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋Š” ๊ฑฐ์˜ ๊ฐ™์€๋ฐ,
ex) arr.map ์ด๋‚˜ arr.filter ๋ฅผ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ํ•œ๋‹ค.
์ด๊ฑธ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ํ•œ๋‹ค.
์ด๋•Œ ๊ทธ ๋น„๋ฐ€์„ ์•Œ๊ฒŒ ๋ ๊ฑฐ๋‹ค.

mdn ์—์„œ array.prototype.map ์ฒ˜๋Ÿผ prototype์ด ์žˆ์„๊ฑฐ๋‹ค.
์ด๊ฑด ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ๋ฐฐ์šธ๊ฑฐ๋‹ค.

prototype๋Š” ์›ํ˜•๊ฐ์ฒด๋ผ๊ณ  ํ•œ๋‹ค.



map
= ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ ์šฉ์‹œ์ผฐ์„๋•Œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค.  (slice ์ฒ˜๋Ÿผ immutable)

let arr = [1,2,3,4,5]
function multiply2(num) {
	return num * 2
}

arr.map(multiply2);

// ์ถœ๋ ฅ๊ฐ’
[2,4,6,8,10]

 

* ์ฝœ๋ฐฑํ•จ์ˆ˜์— ๋‘ ๋ฒˆ์งธ ์ „๋‹ฌ์ธ์ž๋ฅผ ์ค„ ๊ฒฝ์šฐ, ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. 

let arr = [1,2,3,4,5]
function multiply2(num) {
	return num * 2
}

arr.map((el,idx) => `${idx} : ${el * 2}`);

// ์ถœ๋ ฅ๊ฐ’
['0 : 2', '1 : 4', '2 : 6', '3 : 8', '4 : 10']

 

* map์€ ๋ฆฌํ„ด์ด ์—†์œผ๋ฉด undefined๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ฐฐ์—ด์ด ์ƒ๊ธด๋‹ค.


filter
๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ ์šฉ์‹œ์ผฐ์„๋•Œ, true ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ์š”์†Œ๋“ค๋งŒ ๋ชจ์€ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฆฌํ„ด

let arr = [1,2,3,4,5]

arr.filter((el) => el % 2 === 0);

//์ถœ๋ ฅ๊ฐ’
[2, 4]

 

let arr= [1,2,3,4,5]

arr.filter((el) => el % 2);

// ์ถœ๋ ฅ๊ฐ’
[1,3,5]

filter๋Š” ์กฐ๊ฑด์‹์ด true์ธ ๊ฒฝ์šฐ ๊ฐ’๋งŒ ์ถœ๋ ฅํ•˜๋ฏ€๋กœ, el % 2๋ฅผ ํ•ด์„œ 0์ด ๋‚˜์˜ค๋Š” ๊ฐ’์€ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค. 
์™œ๋ƒ๋ฉด 0์€ falsyํ•œ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 


reduce
๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋ฅผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ๋งž๊ฒŒ ํ•˜๋‚˜๋กœ ์‘์ถ•์‹œํ‚จ ๊ฐ’์„ ๋ฆฌํ„ด // ๋ˆ„์ , ํ˜„์žฌ, ์ดˆ๊ธฐ๊ฐ’์ด ์ค‘์š”ํ•˜๋‹ค!

acc: accumulation ์‘์ถ•๋œ ๊ฐ’

cur: current ํ˜„์žฌ ๋ฐฐ์—ด ์š”์†Œ

 

  1. ์ดˆ๊ธฐ๊ฐ’์ด ์—†์„๋•Œ

acc๋Š” ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ
cur๋Š” ๋ฐฐ์—ด์˜ ๋‘๋ฒˆ์งธ ์š”์†Œ
๋งˆ์ง€๋ง‰์—๋Š” ์ตœ์ข…์ ์ธ acc๊ฐ’์ด ๋ฆฌํ„ด๋œ๋‹ค.

 

let arr = [1,2,3,4,5]
arr.reduce((acc,cur) => {return acc + cur});

// ์ถœ๋ ฅ๊ฐ’
15


let arr = [1,2,3,4,5]
arr.reduce((acc,cur) =>  acc + cur);

// ์ถœ๋ ฅ๊ฐ’
15

 

   2. ์ดˆ๊ธฐ๊ฐ’์ด ์žˆ์„๋•Œ


์ดˆ๊ธฐ๊ฐ’์€ ์ดˆ๊ธฐ๊ฐ’์ด ๋˜๋Š”๊ฑฐ๊ณ ,
cur์€ ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ๋˜๋Š”๊ฑฐ๋‹ค.

๋งˆ์ง€๋ง‰์—๋Š” ์ตœ์ข…์ ์ธ acc๊ฐ’์ด ๋ฆฌํ„ด๋œ๋‹ค.
์ดˆ๊ธฐ๊ฐ’ ์žˆ์œผ๋ฉด ๋ฐ˜๋ณตํšŸ์ˆ˜๊ฐ€ ์—†์„๋•Œ๋ณด๋‹ค ํ•œ๋ฒˆ ๋” ๋งŽ๋‹ค.

let arr = [1,2,3,4,5]
arr.reduce((acc,cur) => {return acc + cur},10);

// ์ถœ๋ ฅ๊ฐ’
25


let arr = [1,2,3,4,5]
arr.reduce((acc,cur) =>  acc + cur, 10);

// ์ถœ๋ ฅ๊ฐ’
25

 

let arr = [1,2,3,4,5]
arr.reduce((acc,cur) => {
	if(cur % 2 === 0) {
		return acc + cur
	} else {
		return acc
	}
},0)

// ์ถœ๋ ฅ๊ฐ’
6

 

 

  1. ์ญ‰ ๊ฐ”๋‹ค๊ฐ€ ์‘์ถ•ํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ reduce ์“ฐ๋ฉด๋œ๋‹ค.

reduce๋ฅผ ์“ธ๋•Œ ์˜๋„์น˜์•Š๊ฒŒ ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•˜๊ธฐ ์‰ฌ์›Œ์„œ ๋˜๋„๋ก์ด๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์ทจ์ง€์— ๋งž์ถ”์–ด์„œ ์ทจ์ง€๊ฐ’์„ ์ฃผ๋Š”๊ฒŒ ๋” ์ข‹๋‹ค!!!


๋‚ด์žฅํ•จ์ˆ˜๋กœ ์ถ”์ถœํ•œ ๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๋•Œ, ์ดํ›„์— ๋ณ€ํ•˜์ง€ ์•Š์„ ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ const๋กœ ์„ ์–ธํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.

const ๋กœ ์จ์•ผ.. ๋‚˜์ค‘์— ํŽ˜์นญ ํ• ๋•Œ ์ด๊ฒŒ ํ•œ๋ฒˆ์ฝ๊ณ  ๋์ด์•„๋‹ˆ๋ผ ๊ฒ€์‚ฌ > ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ const ๋กœ ์„ ์–ธํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ชฝ์—์„œ๋„ ๋”๋น ๋ฅด๋‹ค๊ณ  ํ•˜๋”๋ผ๊ณ ์š” ๋ฐ”๋กœ๋ฐ”๋กœ ์ €์žฅ์ด๋˜์–ด์„œ ์–ด์ฐจํ”ผ ๋ณ€ํ•˜๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ผ


 



foreach ๊ณต๋ถ€ํ•˜๊ธฐ

[1,2,3,4,5].foreach(el => {
console.log(el)
})

foreach ์ถ”๊ฐ€๊ณต๋ถ€๐Ÿ‘‡

2022.05.27 - [JavaScript] - TIL) forEach, for of, filter, reduce