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

JavaScript로 배열의 특정 위치부터 n개 요소 가져오기 — Array.prototype.get() 직접 구현하기

이번 글에서는 세 개의 인수를 받는 배열 함수 Array.prototype.get()을 직접 작성해 보겠습니다. 첫 번째 인수는 가져올 개수를 뜻하는 숫자 n, 두 번째 인수는 시작 인덱스 m(m ≤ 배열 길이-1), 세 번째 인수는 'left' 또는 'right' 두 값 중 하나를 가지는 문자열입니다.

이 함수는 원본 배열의 부분 배열을 반환하며, 인덱스 m부터 시작해 지정한 방향(left 또는 right)으로 n개의 요소를 담아야 합니다. 배열의 끝에 도달하면 다시 처음으로 되돌아가는 순환(circular) 방식으로 동작한다는 점이 핵심입니다.

예를 들어 다음과 같습니다.

// 배열이 다음과 같고:
const arr = [0, 1, 2, 3, 4, 5, 6, 7];
// 함수 호출이 다음과 같다면:
arr.get(4, 6, 'right');
// 출력 결과는 다음과 같아야 합니다:
const output = [6, 7, 0, 1];

인덱스 6에서 오른쪽 방향으로 4개의 요소를 가져오면 6, 7까지 진행한 뒤 배열 끝을 넘어 다시 0, 1로 순환하는 것을 확인할 수 있습니다. 그럼 실제 코드를 작성해 보겠습니다.

구현 예제

const arr = [0, 1, 2, 3, 4, 5, 6, 7];
Array.prototype.get = function(num, ind, direction){
    const amount = direction === 'left' ? -1 : 1;
    if(ind > this.length-1){
        return false;
    };
    const res = [];
    for(let i = ind, j = 0; j < num; i += amount, j++){
        if(i > this.length-1){
            i = i % this.length;
        };
        if(i < 0){
            i = this.length-1;
        };
        res.push(this[i]);
    };
    return res;
};
console.log(arr.get(4, 6, 'right'));
console.log(arr.get(9, 6, 'left'));

출력 결과

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

[ 6, 7, 0, 1 ]
[
    6, 5, 4, 3, 2,
    1, 0, 7, 6
]

코드 동작 원리

코드가 어떻게 동작하는지 단계별로 살펴보겠습니다.

  • 방향 결정: direction이 'left'이면 인덱스를 감소시키기 위해 -1을, 그렇지 않으면('right') +1을 증분값(amount)으로 설정합니다.
  • 유효성 검사: 시작 인덱스 m이 배열 범위를 벗어나면 false를 반환해 잘못된 입력을 early return으로 처리합니다.
  • 순환 처리: 인덱스가 배열 끝을 넘어서면 나머지 연산(%)으로 배열 처음으로 되돌리고, 음수가 되면 마지막 인덱스로 이동시켜 마치 원형 배열처럼 동작하게 만듭니다.
  • 결과 수집: n개의 요소를 모두 모을 때까지 결과 배열(res)에 값을 하나씩 push한 뒤 최종적으로 반환합니다.

이처럼 나머지 연산과 조건 분기를 활용하면 배열 경계를 넘나드는 순환 탐색 로직을 간결하게 구현할 수 있습니다. 슬라이딩 윈도우, 원형 큐 등 다양한 상황에서 응용할 수 있는 패턴이니 꼭 기억해 두세요.