[JS] reduce 뜯어보기

Dev.Jo·2021년 3월 12일
0

reduce 함수는 배열을 기반으로 값 하나를 도출할 때 사용된다

인자로 다음을 받을 수 있다

  • accumulator : 이전 함수 호출의 결과. initial은 함수 최초 호출 시 사용되는 초깃값을 나타냄(옵션)
  • item : 현재 배열 요소
let value = arr.reduce(function(accumulator, item) {
  // ...
}, [initial]);

예제)

let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((sum, current) => sum + current, 0);
alert(result); // 15
  1. reduce 함수가 호출이 되면 initial=0 이 sum에 할당.
  2. arr[0]=1 이 current에 할당된다

다음 호출 시 sum=1 , current=2가 되고 계속해서 배열의 요소를 돌며 반복한다

주의)

초기값인 initial은 생략이 가능하지만 배열이 비어있는 경우 에러가 발생할 수 있기 때문에 초기값을 항상 명시해 주는 것을 권장한다

예제1) Nested 배열 펼치기

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
  (accumulator, currentValue) => accumulator.concat(currentValue),
  []
);
// 펼친 결과: [0, 1, 2, 3, 4, 5]
  1. accumulator에는 초기값으로 빈 배열 []이 할당
  2. currentValue에는 배열 flattened[0]=[0,1]이 할당되고

accumulator.concat()이 실행되면 accumulator=[0,1]이 할당
다음 호출시 계속해서 반복된다

예제2) 배열의 중복 항목 제거

let arr = [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4];
let result = arr.sort().reduce((accumulator, current) => {
    const length = accumulator.length
    if (length === 0 || accumulator[length - 1] !== current) {
        accumulator.push(current);
    }
    return accumulator;
}, []);
console.log(result); //[1,2,3,4,5]
  1. arr.sort()로 정렬 arr=[1,1,2,2,3,3,4,4,4,4,5]
  2. 가장 최근에 push한 accumulator[length-1]와 현재 값 current를 비교 후 같지 않다면(accumulator 배열에 없다면) push
profile
소프트웨어 엔지니어, 프론트엔드 개발자

0개의 댓글

관련 채용 정보