이번 글에서는 숫자 배열을 인자로 받아, 배열 안의 모든 세 자리 정수(100~999)를 배열의 맨 앞으로 이동시키는 JavaScript 함수를 작성해 보겠습니다.
예를 들어 다음과 같은 배열이 주어졌을 때,
const numList = [1, 324, 34, 3434, 304, 2929, 23, 444];
세 자리 숫자인 324, 304, 444가 배열의 앞쪽으로 이동하도록 만드는 것이 목표입니다.
예제 코드
먼저 숫자가 세 자리인지 판별하는 헬퍼 함수와, 해당 조건을 만족하는 요소를 앞으로 가져오는 함수를 작성합니다.
const numList = [1, 324, 34, 3434, 304, 2929, 23, 444];
const isThreeDigit = num => num > 99 && num < 1000;
const bringToFront = arr => {
for(let i = 0; i < arr.length; i++){
if(!isThreeDigit(arr[i])){
continue;
};
arr.unshift(arr.splice(i, 1)[0]);
};
};
bringToFront(numList);
console.log(numList);코드 동작 원리
isThreeDigit 함수는 전달받은 숫자가 99보다 크고 1000보다 작은지, 즉 100부터 999 사이의 값인지 확인합니다.
bringToFront 함수는 배열을 처음부터 끝까지 순회하면서 세 자리 숫자를 만나면 splice(i, 1)로 해당 요소를 제거한 뒤, unshift()를 사용해 배열의 맨 앞에 다시 삽입합니다. 요소를 제거하고 바로 앞에 삽입하기 때문에 나머지 요소들의 인덱스는 그대로 유지되며, 반복문이 정상적으로 진행됩니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
[ 444, 304, 324, 1, 34, 3434, 2929, 23 ]
실행 결과를 보면 세 자리 숫자인 444, 304, 324가 배열의 맨 앞으로 이동한 것을 확인할 수 있습니다. 참고로 이 방식은 원본 배열을 직접 수정(in-place)한다는 점을 기억해 두시면 좋습니다. 원본을 유지해야 하는 상황이라면 filter()와 스프레드 연산자를 활용해 새로운 배열을 반환하는 방식도 고려할 수 있습니다.