■ 프론트엔드 ■/JavaScript
ES6. 리듀서 함수를 이용한 객체 누산기
serpiko
2020. 7. 8. 16:46
실무에서 작업 중, 반복된 패턴을 순회하며 [ 기존값에 현재값을 적재(acuumlator)] 하는 상황에서
reduce함수가 생각나서 사용해보았다.
reduce
reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.
리듀서 함수는 네 개의 인자를 가집니다.
- 누산기accumulator (acc)
- 현재 값 (cur)
- 현재 인덱스 (idx)
- 원본 배열 (src)
리듀서 함수의 반환 값은 누산기(어큐멀레이터)에 할당되고,
누산기는 순회 중 유지되므로 결국 최종 결과는 하나의 값이 됩니다.
객체를 합칠때는 ... 연산자를 이용해서 합칠수도 있지만 아래와 같이 FIXED_DATA라는 상수의 값(혹은 옵션)이
연속해서 추가되는 상황이라면 함수로 빼내어 다음과 같이 사용할 수 있습니다.
//
const FIXED_DATA = {a: "hello", b:"serpiko"};
const JWT_DATA = {special: "thing"};
//
const mixInObject = params => [FIXED_DATA,JWT_DATA, params].reduce(
(accumulator, currentValue) => accumulator = { ...accumulator, ...currentValue }
);
function myFunction(parameters){
parameters = mixInObject(parameters);
document.write( JSON.stringify(parameters, null, 2) );
}
myFunction({c:"i'm", d:"sleepy"});