๐ฅ ์ค์ด๊ธฐ: ์ก์ฆ์ด ๊ฐ๋ํด์, ์๊ธฐ์ผ!
reduce
ํจ์์
๋๋ค. MDN documentation on reduce
์ ๊ฐ ๋๋ง๋ค ์ฒ์์๋ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ ๋ฐ ์ฝ๊ฐ์ ์ด๋ ค์์ด ์์ต๋๋ค.๊ทธ๋ผ ํธ์ํฐ๋ ๊ฐ๋ณด๋ฉด ๋ค๋ค "reduce๊ฐ ์ ์ผ ์ค์ํ ๋ฐฐ์ด ํจ์์ผ!"์ ํธ ๋ถ์ ๐ฉ!
๋ฐ๋ผ์ ์ด ์งง์ ๊ฒ์๋ฌผ์์๋ Reduce์ ๋ํด ์ค๋ช ํ๊ณ ์ค์ ๋ก ๊ด๋ จ์ด ์๊ณ ์๋์ ์ด์ง ์์ ์๋ฅผ ๋ณด์ฌ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๊ทธ๋์ ๊ทธ๊ฒ์ผ๋ก; ๐ฅ๋ฅผ ์ค์ด์.
"๊ณต์"๋ฌธ์ ์ค๋ช ๋ถํฐ ์์ํด ๋ณด๊ฒ ์ต๋๋ค.
The reduce() method executes a user-supplied "reducer" callback function on each element of the array, in order, passing in the return value from the calculation on the preceding element. The final result of running the reducer across all elements of the array is a single value.
์ด๊ฒ์ผ๋ก๋ถํฐ ์ฐ๋ฆฌ๋ ๋ค์์ ์๋๋ค.
() => {}
๋ฅผ ์ฌ์ฉํฉ๋๋ค.(previousValue, currentValue) => {}
reduce
๋ ์ด ํจ์์ ๋ํ ์ ๋ง ๋ฉ์ฒญํ ์ด๋ฆ์
๋๋ค. IMOaccumulator
๊ฐ ํจ์ฌ ๋ ์ ํํ๊ณ ์ ํํ ์ฉ์ด์
๋๋ค. ํ ๊ฐ์ง ์ ์ํ ์ ์
reduce
๊ฐ ์ฝ๋ฐฑ์ ๋ฐ์ง๋ง ๋งค๊ฐ๋ณ์๋ก initial value
๋ ๋ฐ๋๋ค๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก "๋์ฐ๊ธฐ๋ฅผ ์๋์ํค๋ ๊ฒ"์
๋๋ค. ์ซ์๋ฅผ ์ถ๊ฐ/์กฐ์ํ๋ ๊ฒฝ์ฐ 0
์์ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
// This is incredibly similar to the MDN example
const arrayToReduce = [1, 2, 3, 4, 5];
arrayToReduce.reduce((prevValue, currValue) => return prevValue + currValue), 0)
ํ์ง๋ง MDN์ ์๋ฅผ ๋ค์ด ์กฐ๊ธ ๋ถํดํด ๋ด ์๋ค. ์๋ ๋ฐฉ์์ ์ข ๋ ์ดํดํ๋ ค๋ฉด console.logs๋ก ์๋ฃํ์ธ์.
const initialValue = 0;
const arrayToReduce = [1, 2, 3, 4, 5];
arrayToReduce.reduce(
(previousValue, currentValue) => {
console.log("prev:", previousValue, "curr:", currentValue);
const result = previousValue + currentValue;
console.log("result", result);
return result
},
initialValue
);
์ด๊ฒ์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
> "prev: " 0 "curr:" 1
> "result" 1
> "prev: " 1 "curr:" 2
> "result" 3
> "prev: " 3 "curr:" 3
> "result" 6
> "prev: " 6 "curr:" 4
> "result" 10
> "prev: " 10 "curr:" 5
> "result" 15
> 15
๋๋ ์ถ๋ ฅ์ ๋ณด์ฌ์ฃผ๋ ์์์ด ์ด๊ฒ์ ์ค๋ช ํ๊ณ ๋ชจ๋ ๊ฒ์ด ์์งํ์ง ์๋ค๊ณ ๋๋๋๋ค. ์ฌ๊ธฐ์์ ๋ช ํํ๊ฒ ๋ณผ ์ ์๋ฏ์ด ๊ธฐ๋ณธ์ ์ผ๋ก
result
๋ ์ฝ๋ฐฑ( previousValue
)์ ์
๋ ฅ์ผ๋ก ๋ค์ ๋ฐ๋ณต์ ์ถ๊ฐ๋๋ฉฐ ๋ฐฐ์ด์ด ๋ฐ๋ณต๋๋ ํ์ฌ ๋ฐ๋ณต์ currentValue
์
๋๋ค.์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์์ ์ํํ๋ ๊ฒ๊ณผ ๋์ผํฉ๋๋ค.
const arrayToForLoop = [1, 2, 3, 4, 5];
let valueToKeepTrackOf = 0; //equivalent to reduce's "initialValue" parameter
let finalResult = [];
arrayToForLoop.forEach(item => {
console.log("prev:", valueToKeepTrackOf, "current:", item);
valueToKeepTrackOf += item;
console.log(valueToKeepTrackOf);
finalResult.push(valueToKeepTrackOf);
});
console.log(finalResult);
๊ทธ๋์ ๋น์ ์ ๊ทธ๊ฒ์ ๊ฐ์ง๊ณ ์์ต๋๋ค! ์์ปจ๋
reduce
์
๋๋ค. ์ฐ์ฐ์๋ฅผ ์ถ๊ฐ/์ฌ์ฉํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค!๋ด ๊ฐ์ธ์ ์ธ ์กฐ์ธ: ๋ณต์กํ ์ผ์ ์ด๊ฒ์ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ์ ๋ง ๋ณต์กํ๊ฑฐ๋ ์ฌ๋ฌ JSON ๊ฐ์ฒด์ ์ค์ฒฉ๋ ์์ ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ ๋จผ์ ๋จ์ํํ๊ณ ๊ฑฐ๊ธฐ์์ ์์ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ธ์ ๋์ฒ๋ผ MDN is a great source to understand this in its entirety .
ํ์ง ์ฌ์ง ํฌ๋ ๋ง: La Cucina Italia
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฅ ์ค์ด๊ธฐ: ์ก์ฆ์ด ๊ฐ๋ํด์, ์๊ธฐ์ผ!), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/pcanella/reduce-not-as-scary-as-it-may-look-55c9ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค