문제: https://programmers.co.kr/learn/courses/30/lessons/70128
function solution(a, b) {
let result = 0;
for (let i = 0; i < a.length; i++) {
result += a[i] * b[i];
}
return result;
}
// 실행
console.log(solution([1, 2, 3, 4], [-3, -1, 0, 2])); // 3
console.log(solution([-1, 0, 1], [1, 0, -1])); // -2
function solution(a, b) {
return a.reduce((acc, _, i) => acc += a[i] * b[i], 0);
}
Array.prototype.reduce() :누적 계산의 결과 값(acc)가 나옴
//<초기값이 없는 경우>
[0, 1, 2, 3, 4].reduce(function(acc, cur, Index, arr) {
return accumulator + currentValue;
});
callback accumulator currentValue currentIndex array 반환 값
1번째 호출 0 1 1 [0, 1, 2, 3, 4] 1
2번째 호출 1 2 2 [0, 1, 2, 3, 4] 3
3번째 호출 3 3 3 [0, 1, 2, 3, 4] 6
4번째 호출 6 4 4 [0, 1, 2, 3, 4] 10
//<초기값이 있는 경우>
[0, 1, 2, 3, 4].reduce(function(acc, cur,Index, arr) {
return accumulator + currentValue;
}, 10);
accumulator currentValue currentIndex array 반환값
1번째 호출 10 0 0 [0, 1, 2, 3, 4] 10
2번째 호출 10 1 1 [0, 1, 2, 3, 4] 11
3번째 호출 11 2 2 [0, 1, 2, 3, 4] 13
4번째 호출 13 3 3 [0, 1, 2, 3, 4] 16
5번째 호출 16 4 4 [0, 1, 2, 3, 4] 20
.
let arr=[4,8,12];
arr.reduce((a , b)=>{return a+b}, 1);
//실행 1 , 4 5
5 , 8 13
13 ,12 25
let arr = [4,8,12];
const result = arr.reduce((arr , num)=>[...arr,num],[])
//실행 [] , 4 [4]
[4] , 8 [4,8]
[4,8], 12 [4,8,12]
console.log(result); // [4,8,12]
// console.log(arr === result); // false
let arr2 = [4, 8, 12];
const result2 = arr2.reduce((arr, num) => [...arr, num], []);
console.log(result2); // 배열이 복사됨.
// console.log(arr2 === result2); // false
const arr4 = ['A', 'B', 'C', 'A', 'C', 'C'];
function test() {
return arr4.reduce((acc, cur) => {
acc[cur] ? (acc[cur] += 1) : (acc[cur] = 1);
return acc;
}, {});
}
console.log(test());// {'A':2,'B':1,'C':3}
const nums = [2, 2, 1, 1, 1, 2, 2];
const obj = nums.reduce(
(acc, cur) => ({ ...acc, [cur]: acc[cur] ? acc[cur] + 1 : 1 }),
{},
);
console.log(obj); // {1: 3, 2: 4}