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

JavaScript 배열에서 특정 범위 요소의 합 구하기

JavaScript에서는 Array.prototype 객체에 직접 함수를 추가하여 배열의 기능을 확장할 수 있습니다. 이번 글에서는 시작 인덱스와 끝 인덱스를 인자로 받아, 해당 범위에 속한 모든 요소(시작과 끝 인덱스 포함)의 합을 계산하는 배열 함수를 만들어 보겠습니다.

구현 예제

const arr = [1, 2, 3, 4, 5, 6, 7];

const sumRange = function(start = 0, end = this.length - 1){
   // 시작 인덱스가 끝 인덱스보다 크면 유효한 범위가 없으므로 0 반환
   if(start > end){
      return 0;
   };
   let sum = 0;
   for(let i = start; i <= end; i++){
      sum += this[i];
   };
   return sum;
};

Array.prototype.sumRange = sumRange;

console.log(arr.sumRange(0, 4));

출력 결과

콘솔에는 다음과 같이 출력됩니다 −

15

인덱스 0부터 4까지의 요소는 1, 2, 3, 4, 5이며, 이들의 합은 15입니다. 이처럼 this를 활용하면 함수가 호출된 배열 자체에 접근할 수 있어, 어떤 배열에도 재사용 가능한 범위 합계 기능을 손쉽게 추가할 수 있습니다.

reduce()를 활용한 더 간결한 구현

for 반복문 대신 내장 메서드인 reduce()를 사용하면 코드를 훨씬 간결하고 가독성 있게 작성할 수 있습니다.

Array.prototype.sumRange = function(start = 0, end = this.length - 1){
   if(start > end) return 0;
   return this.slice(start, end + 1).reduce((acc, val) => acc + val, 0);
};

console.log(arr.sumRange(0, 4)); // 15

slice()로 원하는 범위의 요소들을 추출한 뒤 reduce()로 누적합을 계산하는 방식으로, 코드의 의도가 명확하게 드러나고 유지보수도 쉬워집니다.