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

JavaScript에서 두 배열을 번갈아 가며 병합하는 방법

두 개의 배열을 입력받아 각 배열의 요소를 번갈아가며 하나의 새로운 배열로 병합하는 JavaScript 함수를 작성해야 합니다.

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

const arr1 = [4, 3, 2, 5, 6, 8, 9];
const arr2 = [2, 1, 6, 8, 9, 4, 3];

그렇다면 기대되는 출력 결과는 다음과 같습니다. 첫 번째 배열의 요소와 두 번째 배열의 요소가 순서대로 교차하여 배치됩니다.

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

구현 예제

다음은 이 문제를 해결하는 전체 코드입니다.

const arr1 = [4, 3, 2, 5, 6, 8, 9];
const arr2 = [2, 1, 6, 8, 9, 4, 3];
const mergeAlernatively = (arr1, arr2) => {
   const res = [];
   for(let i = 0; i < arr1.length + arr2.length; i++){
      if(i % 2 === 0){
         res.push(arr1[i/2]);
      }else{
         res.push(arr2[(i-1)/2]);
    };
  };
  return res;
};
console.log(mergeAlernatively(arr1, arr2));

출력 결과

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

[
   4, 2, 3, 1, 2, 6,
   5, 8, 6, 9, 8, 4,
   9, 3
]

코드 동작 원리

이 함수의 핵심 로직은 다음과 같습니다.

  • 반복문은 두 배열 길이의 합만큼 실행됩니다.
  • 인덱스 i짝수일 때는 첫 번째 배열(arr1)에서 i / 2번째 요소를 가져옵니다.
  • 인덱스 i홀수일 때는 두 번째 배열(arr2)에서 (i - 1) / 2번째 요소를 가져옵니다.

이러한 방식으로 짝수 자리에는 arr1의 요소가, 홀수 자리에는 arr2의 요소가 차례로 배치되어 두 배열이 자연스럽게 교차 병합됩니다.

참고: 길이가 다른 배열 처리하기

위 구현은 두 배열의 길이가 같을 때를 기준으로 동작합니다. 만약 두 배열의 길이가 다르다면, 더 긴 배열의 일부 요소가 undefined로 채워지거나 누락될 수 있습니다. 이 경우 아래와 같이 조건 검사를 추가하면 안전하게 처리할 수 있습니다.

const mergeAlternatively = (arr1, arr2) => {
   const res = [];
   const maxLen = Math.max(arr1.length, arr2.length);
   for(let i = 0; i < maxLen; i++){
      if(i < arr1.length){
         res.push(arr1[i]);
      }
      if(i < arr2.length){
         res.push(arr2[i]);
      };
  };
  return res;
};

이 버전은 각 인덱스에서 해당 배열에 요소가 존재하는 경우에만 값을 추가하므로, 길이가 서로 다른 배열도 오류 없이 병합할 수 있습니다.