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

ES6 내장 함수 없이 배열의 가운데 요소 찾기 – JavaScript

이번 글에서는 length 속성에 접근하지 않고, 어떠한 내장 반복문도 사용하지 않은 채 배열의 가운데 요소를 반환하는 함수 midElement()를 작성해 보겠습니다.

요구 조건은 다음과 같습니다.

  • 배열의 요소 개수가 홀수라면 → 정확히 가운데 있는 하나의 요소를 반환
  • 배열의 요소 개수가 짝수라면 → 가운데 두 개의 요소를 담은 배열을 반환

예제 코드

const arr = [14, 32, 36, 42, 45, 66, 87];
const array = [13, 92, 83, 74, 55, 46, 74, 82];
const midElement = (arr, ind = 0) => {
    if(arr[ind]){
        return midElement(arr, ++ind);
    };
    return ind % 2 !== 0 ? [arr[(ind-1) / 2]] : [arr[(ind/2)-1], arr[ind/2]];
};
console.log(midElement(arr));
console.log(midElement(array));

코드 동작 원리

이 코드의 핵심은 재귀 호출(recursion)입니다. 인덱스 ind를 0부터 시작해 해당 위치에 요소가 존재하는 동안 계속 1씩 증가시키며 자기 자신을 호출합니다. 인덱스 위치에 더 이상 요소가 없으면(arr[ind]undefined가 되면) 재귀가 종료되는데, 이때의 ind 값이 곧 배열의 실제 길이가 됩니다.

이후 ind가 홀수인지 짝수인지에 따라 삼항 연산자로 분기하여, 홀수면 가운데 한 개의 요소를, 짝수면 가운데 두 개의 요소를 배열로 감싸 반환합니다. 이렇게 하면 length 속성이나 for, while 같은 반복문 없이도 배열의 크기를 알아낼 수 있습니다.

출력 결과

위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.

[ 42 ]
[ 74, 55 ]

첫 번째 배열 arr는 요소가 7개(홀수)이므로 가운데 값 42 하나가 반환되고, 두 번째 배열 array는 요소가 8개(짝수)이므로 가운데 두 값 7455가 배열 형태로 반환됩니다.