[JAVASCRIPT] 배열의 중복 값 개수 구하기 – REDUCE()
지난 글에서는 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 를 {}로 지정해주었기 때문에 accu(누적값)의 첫 값은 {}이다. 그리고 배열의 첫 값을 받는 curr는 ‘a’고, 빈 객체에서 ‘a’를 찾는 accu[curr]값은 undefined가 나온다. 아직 빈 객체라 ‘a’ key값의 value가 없기 때문이다.
- 1번에서 객체안에 ‘a’의 값이 없었기 때문에 0을 할당한 뒤 + 1해주었고, 두번째 curr값은 ‘b’다. 이번에도 역시 객체안에 ‘b’라는 key값은 존재하지 않기 때문에 accu[curr]값은 undefined다.
- 2번에서 ‘b’의 value값으로 0+1이 할당되었기 때문에 누적값은 {a: 1, b:1}이 되었다. 이후 부터는 객체안에 key값이 존재하면 그 value값에 1을 더해주고, 없다면 0을 할당한뒤 1을 더해주는 방식을 반복한다.
객체를 initialValue로 지정해주고 그 안에 key값이 있는지 확인해 value에 1씩 더해주는 방식으로 배열의 중복되는 원소 갯수를 구해보았다. 👊🏻
Author And Source
이 문제에 관하여([JAVASCRIPT] 배열의 중복 값 개수 구하기 – REDUCE()), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dev_cecy/JAVASCRIPT-배열의-중복-값-개수-구하기-REDUCE저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)