arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
이라는 배열이 있다고 하자.
이 배열의 누적합을 구하려면 어떻게 해야할까?
내가 처음으로 생각했던 아래 2개의 방법이였다.
let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
let sum = 0;
for(let i=0; i<arr.length; i++){
sum = sum + arr[i];
}
arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
let sum = 0;
arr.forEach((num) => {
sum =+ num;
});
물론 이 방법도 맞는 방법이긴 하다.
하지만 이번에는 reduce라는 메서드를 사용해보려고 한다.
reduce() 메서드는 배열의 각 요소에 대해 주어진 reducer함수를 실행하고, 하나의 결과값을 반환한다.
(누적 계산값, 현재값) => { return 계산값 };
let arr = [20, 7, 23, 19, 10, 15, 25, 8, 13];
let sum = arr.reduce((prev, cur) => {
return prev + cur; // 140
}, 0)
reduce는 함수를 받는데 이전값과 현재값을 받는다. 여기서 이전값은 현재까지 누적된 계산값이다. 초기값은 0이다.
let userList = [
{name: "Mike", age: 30},
{name: "Tom", age: 10},
{name: "Jane", age: 27},
{name: "Sue", age: 26},
{name: "Harry", age: 42},
{name: "Steve", age: 60},
];
let result = userList.reduce((prev,cur)=>{
if(cur.age > 19){
prev.push(cur.name);
}
return prev;
},[]);
console.log(result); // [ 'Mike', 'Jane', 'Sue', 'Harry', 'Steve' ]
let userList = [
{name: "Mike", age: 30},
{name: "Tom", age: 10},
{name: "Jane", age: 27},
{name: "Sue", age: 26},
{name: "Harry", age: 42},
{name: "Steve", age: 60},
];
let result = userList.reduce((prev,cur)=> {
return (prev += cur.age)
},0);
console.log(result); // 195