지난 글에서는 reduce() 기본쓰임과, 누적된 값(accumulator)을 인자로 받는 특성을 이용하여 배열의 원소를 모두 더해보았다.
이번에는 누적된 값과 initialValue를 지정할 수 있는 특성을 이용해 배열 내의 중복된 값이 몇 개 있는지 구해보자!
const array = ['a', 'b', 'a', 'a', 'b'];
const result = array.reduce((accu, curr) => {
console.log('accu',accu, 'curr', curr, accu[curr])
accu[curr] = (accu[curr] || 0)+1; // 객체에서 curr key값을 찾아 value값이 있으면 그 value에서 1을 더하고, 없다면 0을 할당하고 거기에 1을 더해준다.
return accu;
}, {});
console.log('result',result); // 'result' { a: 3, b: 2 }
reduce()가 어떤식으로 배열을 순회하는지 보기위해 중간에 console.log을 찍어주었는데, console.log만 가져와서 뜯어보면 이런식이다.
console.log('accu',accu, 'curr', curr, accu[curr])
'accu' {} 'curr' 'a' undefined // 1번
'accu' { a: 1 } 'curr' 'b' undefined // 2번
'accu' { a: 1, b: 1 } 'curr' 'a' 1 // 3번
'accu' { a: 2, b: 1 } 'curr' 'a' 2
'accu' { a: 3, b: 1 } 'curr' 'b' 1
객체를 initialValue로 지정해주고 그 안에 key값이 있는지 확인해 value에 1씩 더해주는 방식으로 배열의 중복되는 원소 갯수를 구해보았다. 👊🏻
상세한 설명 덕에 쉽게 이해할 수 있었습니다 :)