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

자바스크립트로 배열 안의 짝수를 제자리에 반복(복제)하는 방법

이번 글에서는 배열 안에 있는 짝수를 동일한 배열 내에서 한 번 더 반복(복제)하는 자바스크립트 함수를 작성해 보겠습니다.

예를 들어 다음과 같은 배열이 주어졌을 때 −

const arr = [1, 2, 5, 6, 8];

원하는 출력 결과는 다음과 같습니다 −

const output = [1, 2, 2, 5, 6, 6, 8, 8];

접근 방법

가장 간단하고 안전한 방법은 배열을 뒤에서부터 순회하면서 짝수를 만날 때마다 해당 위치에 같은 값을 삽입(splice)하는 것입니다. 뒤에서부터 순회하면 요소가 삽입되어도 아직 확인하지 않은 앞쪽 인덱스에는 영향을 주지 않기 때문에, 인덱스가 밀리는 문제나 무한 루프 없이 깔끔하게 처리할 수 있습니다.

예제 코드

const arr = [1, 2, 5, 6, 8];
const repeatEvenNumbers = arr => {
    let end = arr.length - 1;
    for(let i = end; i > 0; i--){
        if(arr[i] % 2 === 0){
            arr.splice(i, 0, arr[i]);
        };
    };
    return arr;
};
console.log(repeatEvenNumbers(arr));

코드 설명

  • 뒤에서부터 순회: i를 배열의 마지막 인덱스부터 시작해 1까지 감소시킵니다. 앞에서부터 순회하면 splice로 요소가 삽입될 때 인덱스가 밀려 같은 요소를 중복 처리하거나 건너뛰는 문제가 발생할 수 있습니다.
  • 짝수 판별: arr[i] % 2 === 0 조건으로 현재 요소가 짝수인지 확인합니다.
  • splice(i, 0, arr[i]): 두 번째 인자가 0이므로 기존 요소를 삭제하지 않고, 인덱스 i 위치에 같은 값을 하나만 삽입합니다.

출력 결과

콘솔에는 다음과 같은 결과가 출력됩니다 −

[
    1, 2, 2, 5,
    6, 6, 8, 8
]

참고: 성능

splice()는 삽입 위치 이후의 모든 요소를 이동시켜야 하므로, 위 방식의 전체 시간 복잡도는 O(n²)입니다. 배열의 크기가 매우 크다면 원본을 유지하면서 새 배열에 값을 push하는 방식이 더 효율적일 수 있습니다.