Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 콜백 함수와 초기값으로 배열 값 누적하기

문제

배열, 콜백 함수, 그리고 초기값을 인수로 전달받는 자바스크립트 함수를 작성해야 합니다.

이 함수는 배열을 순회하면서 값을 계속 누적하고, 최종적으로 누적된 결과값을 반환해야 합니다. 즉, Array.prototype.reduce() 메서드와 동일한 방식으로 동작하도록 직접 구현하는 것이 목표입니다.

reduce의 기본 동작 원리는 다음과 같습니다.

  • 누산기(accumulator)에 현재 값을 반복적으로 연산하여 저장합니다.
  • 초기값이 제공되면 그 값부터 시작하고, 제공되지 않으면 배열의 첫 번째 요소를 초기값으로 사용합니다.

예제

다음은 이를 직접 구현한 코드입니다 −

const arr = [1, 2, 3, 4, 5];
const sum = (a, b) => a + b;
Array.prototype.customReduce = function(callback, initial){
   if(!initial){
      initial = this[0];
   };
   let res = initial;
   for(let i = initial === this[0] ? 1 : 0; i < this.length; i++){
      res = callback(res, this[i]);
   };
   return res;
};
console.log(arr.customReduce(sum, 0));

코드 설명: customReduce는 먼저 초기값이 전달되었는지 확인하고, 없다면 배열의 첫 번째 요소를 초기값으로 설정합니다. 이후 반복문을 통해 각 요소마다 콜백 함수를 호출하여 결과를 누적합니다. 초기값이 첫 번째 요소인 경우에는 이미 해당 요소가 처리된 것이므로 인덱스 1부터 순회를 시작합니다.

출력

콘솔 출력 결과는 다음과 같습니다 −

15