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

JavaScript 배열에서 1은 앞으로, 0은 뒤로 분리하는 방법

문제 소개

숫자 배열에 0과 1, 그리고 그 외의 다른 숫자들이 섞여 있다고 가정해 보겠습니다. 이때 자바스크립트 함수를 작성하여 배열 안의 모든 1은 맨 앞으로, 모든 0은 맨 뒤로 이동시켜야 하며, 나머지 숫자들은 원래 순서를 유지한 채 중간에 위치해야 합니다.

해결 코드

아래 예제를 통해 이 문제를 해결하는 함수를 살펴보겠습니다.

const arr = [3, 2, 1, 8, 9, 0, 1, 9, 0, 2, 1, 0, 2, 0, 1, 0, 1, 1, 4, 0, 3];
const segregate = arr => {
    const copy = arr.slice();
    for(let i = 0; i < copy.length; i++){
        if(copy[i] === 0){
            copy.push(copy.splice(i, 1)[0]);
        } else if(copy[i] === 1){
            copy.unshift(copy.splice(i, 1)[0]);
        };
        continue;
    };
    return copy;
};
console.log(segregate(arr));

코드 동작 방식

이 함수는 다음과 같은 단계로 동작합니다.

  • arr.slice()를 사용하여 원본 배열은 그대로 유지하고 복사본을 만들어 작업합니다.
  • 배열을 순회하면서 요소가 0이면 splice()로 해당 요소를 제거한 뒤 push()를 통해 배열의 맨 끝에 추가합니다.
  • 요소가 1이면 마찬가지로 제거한 후 unshift()를 통해 배열의 맨 앞에 추가합니다.
  • 그 외의 숫자는 아무 처리 없이 그대로 두고 다음 요소로 넘어갑니다.

실행 결과

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

[
    1, 1, 1, 3, 2, 8, 9,
    1, 9, 2, 2, 1, 1, 4,
    3, 0, 0, 0, 0, 0, 0
]

결과를 확인해 보면 모든 1이 배열의 앞부분에, 모든 0이 뒷부분에 배치되었고, 나머지 숫자들(3, 2, 8, 9 등)은 상대적인 순서를 유지한 채 중간에 위치한 것을 알 수 있습니다.