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

JavaScript로 배열을 동일한 간격으로 분할하는 함수 만들기

JavaScript에서 두 개의 숫자만 담긴 배열을 원하는 개수만큼 동일한 간격으로 나눠야 하는 경우가 종종 있습니다. 이번 글에서는 parseEqualInterval()이라는 함수를 직접 작성해 보겠습니다.

이 함수는 첫 번째 인자로 정확히 두 개의 요소를 가진 숫자 배열을, 두 번째 인자로 숫자 n을 받습니다. 그런 다음 원래 배열의 두 요소 사이에 등간격의 값 n-1개를 삽입하여 전체 구간을 n개의 동일한 간격으로 나눕니다.

동작 예시

// 입력 배열이 다음과 같고
const arr = [12, 48];
// 간격(interval)이 4라면
4
// 출력 배열은 아래와 같아야 합니다.
const output = [12, 21, 30, 39, 48];

이렇게 하면 배열이 4개의 동일한 구간으로 나뉘게 됩니다. 그럼 이제 실제 코드를 작성해 보겠습니다.

구현 코드

const arr = [12, 48];
const parseEqualInterval = (arr, interval) => {
   const [first, second] = arr;
   const size = (second-first) / interval;
   for(let i = 1, el = first+size; i < interval; i++, el += size){
      arr.splice(i, 0, Math.round((el + Number.EPSILON) * 100) / 100);
   };
};
parseEqualInterval(arr, 4);
console.log(arr);
parseEqualInterval(arr, 6);
console.log(arr);
parseEqualInterval(arr, 10);
console.log(arr);
parseEqualInterval(arr, 15);
console.log(arr);

코드 설명

함수의 핵심 로직은 다음과 같습니다.

  • 먼저 구조 분해 할당으로 배열의 시작값(first)과 끝값(second)을 추출합니다.
  • 전체 범위를 interval로 나누어 한 칸의 간격 크기(size)를 계산합니다.
  • for 루프를 돌면서 splice() 메서드를 사용해 계산된 값을 올바른 위치에 삽입합니다.
  • Number.EPSILON을 더한 뒤 소수점 둘째 자리까지 반올림하여 부동소수점 오차를 최소화합니다.

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

[ 12, 21, 30, 39, 48 ]
[
   12, 13.5, 15, 16.5,
   18, 19.5, 21, 30,
   39, 48
]
[
   12, 12.15, 12.3, 12.45,
   12.6, 12.75, 12.9, 13.05,
   13.2, 13.35, 13.5, 15,
   16.5, 18, 19.5, 21,
   30, 39, 48
]
[
   12, 12.01, 12.02, 12.03, 12.04,
   12.05, 12.06, 12.07, 12.08, 12.09,
   12.1, 12.11, 12.12, 12.13, 12.14,
   12.15, 12.3, 12.45, 12.6, 12.75,
   12.9, 13.05, 13.2, 13.35, 13.5,
   15, 16.5, 18, 19.5, 21,
   30, 39, 48
]

출력 결과를 보면 각 호출마다 기존 배열 위에 새로운 간격 값들이 누적되어 추가되는 것을 확인할 수 있습니다. 이는 함수가 원본 배열을 직접 수정(in-place)하기 때문입니다. 만약 원본 배열을 유지하고 싶다면 함수 내부에서 arr의 복사본을 만들어 작업하면 됩니다.