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

자바스크립트에서 배열의 중간 요소를 구하는 방법

자바스크립트에서 숫자로 이루어진 배열을 입력받아 그 배열의 가장 중간에 있는 요소를 반환하는 함수를 작성해야 하는 경우가 있습니다.

배열의 길이가 홀수라면 정확히 하나의 중간 요소가 존재하지만, 길이가 짝수라면 중앙에 위치한 두 개의 요소를 함께 반환하는 것이 일반적입니다.

문제 이해하기

예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다.

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

이 배열의 길이는 7(홀수)이므로 중간 요소는 4입니다. 따라서 함수는 4를 반환해야 합니다.

구현 예제

다음은 Array.prototype에 middle 메서드를 추가하여 문제를 해결한 코드입니다.

const arr = [1, 2, 3, 4, 5, 6, 7];
const middle = function(){
    const half = this.length >> 1;
    const offset = 1 - this.length % 2;
    return this.slice(half - offset, half + 1);
};
Array.prototype.middle = middle;
console.log(arr.middle());
console.log([1, 2, 3, 4, 5, 6].middle());

코드 동작 원리

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

  • this.length >> 1: 비트 시프트 연산자(>>)를 사용해 배열 길이를 2로 나눈 몫을 구합니다. 이 값이 중간 지점의 인덱스가 됩니다.
  • 1 - this.length % 2: 배열 길이가 홀수이면 offset이 0, 짝수이면 1이 되어 슬라이싱 범위가 자동으로 조정됩니다.
  • slice(half - offset, half + 1): 계산된 인덱스 범위에 해당하는 요소들을 새로운 배열로 반환합니다.

출력 결과

코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

[ 4 ]
[ 3, 4 ]

길이가 7인 첫 번째 배열은 중간 요소인 [4] 하나만 반환하고, 길이가 6인 두 번째 배열은 중앙에 위치한 두 요소인 [3, 4]를 반환합니다. 이처럼 하나의 함수로 홀수와 짝수 길이의 배열을 모두 처리할 수 있습니다.