정골라코딩
[JavaScript] reduce() 함수 본문
문제 설명)
덧셈 함수라고 많은 분들이 알고 계시는 reduce()는, 사실 매우 강력한 함수입니다.
reduce()는 배열의 각 요소에 대해 주어진 함수를 실행한 후, 하나의 결과값을 반환합니다.
앞에서 학습한 map이 배열의 각 요소를 변형한다면, reduce는 배열 자체를 변형합니다.
예를 들어, 배열에 들어있는 숫자를 더하거나 평균을 구하는 것은 배열을 값 하나로 줄이는 동작입니다.
배열.reduce((누적값, 현잿값, 인덱스, 요소) => { return 결과 }, 초기값);
위 문법에서 이전 값이 아니라 누적 값이라는 점을 유의해주셔야 합니다.
[지시사항]
reduce() 함수를 이용해 총 매매손익을 구하세요.
// 예제
let stocks = [
{ name: '엘리스전자', purchasePrice: 80000, currentPrice: 100000, count: 5 },
{ name: '엘리스톡', purchasePrice: 60000, currentPrice: 90000, count: 10 },
{ name: '엘리스', purchasePrice: 30000, currentPrice: 50000, count: 5 },
];
// 총 매매손익은?
let result=stocks.reduce(
(acc, {purchasePrice, currentPrice, count})=>
acc + (currentPrice-purchasePrice)*count,
0
);
document.write(result);
// 첫번째 과정
/*
acc: 0 (초기값 0)
{ purchasePrice, currentPrice, count } (엘리스전자 주식, cur): { purchasePrice: 80000, currentPrice: 100000, count: 5 }
반환값 (return) = 0 + (100000 - 80000) * 5 = 100000 -> 다음 과정의 acc가 됨
name은 불필요해서 가져오지 않은 것입니다!
*/
// 두번째 과정
/*
acc: 100000
{ purchasePrice, currentPrice, count } (엘리스톡 주식, cur): { purchasePrice: 60000, currentPrice: 90000, count: 10 }
반환값 (return) = 100000 + (90000 - 60000) * 10 = 400000
*/
// 세번째 과정
/*
acc: 400000
{ purchasePrice, currentPrice, count } (엘리스톡 주식, cur): { purchasePrice: 30000, currentPrice: 50000, count: 5 }
반환값 (return) = 400000 + (50000 - 30000) * 5 = 500000
*/
'JavaScript > 연습문제' 카테고리의 다른 글
[JavaScript] this로 event 접근하기 (0) | 2022.09.29 |
---|---|
[JavaScript] class (0) | 2022.09.27 |
[JavaScript] map() 함수 (0) | 2022.09.27 |
[JavaScript] forEach() 함수 (0) | 2022.09.27 |
[JavaScript] 금 거래소 문제 (0) | 2022.09.26 |