reduce함수는 배열의 각 요소를 순회하며 callback함수의 실행값을 누적하여 하나의 결과값을 반환한다.
arr.reduce((accumulator, currentValue, index, array) => accumulator + currentValue , initialValue)
총 4가지의 인수를 가진다.
for문을 이용해서 두개의 변수 선언 후 합계를 담은 변수를 배열의 길이만큼 나누어서 몫을 반환 한 후 return 한다.
function solution(arr) {
let sum = 0;
let avg = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
return (avg = sum / arr.length);
}
하지만 reduce 메서드를 이용해 보다 축약된 코드로 짤수있다.
function solution(arr) {
return arr.reduce((acc, next) => acc + next / arr.length, 0);
}
for문과 reduce메서드를 두개 다 사용해서 풀었다. 하지만 충분히 코드를 축약할 수 있고 반복문 하나로도 풀 수 있기에 아래 코드를 리팩토링을 해보았다.
for문과 reduce메서드를 동시에 사용해서 비효율적인 코드이다.
function solution(a, b) {
let newArr = [];
for (let i = 0; i < a.length; i++) {
let sum = a[i] * b[i];
newArr.push(sum);
}
return newArr.reduce((acc, next) => acc + next);
}
수정 후 코드
function solution(a, b) {
let sum = 0;
for (let i = 0; i < a.length; i++) {
sum += a[i] * b[i];
}
return sum;
}
이번엔 for문으로 말고 좀 더 간결하게 reduce메서드를 활용해서 문제를 풀어봤다.
function solution(a, b) {
return a.reduce((acc, next, i) => (acc += a[i] * b[i]), 0);
}