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

JavaScript로 두 배열을 비교해 사전순으로 정렬된 배열 반환하기


두 개의 배열, 예를 들어 arr1arr2를 매개변수로 받는 자바스크립트 함수를 작성해야 합니다. 이 함수의 역할은 arr1의 문자열 중에서 arr2의 문자열 안에 포함되어 있는(즉, 부분 문자열에 해당하는) 값들을 추려낸 뒤, 그 결과를 사전순(lexicographical order)으로 정렬하여 반환하는 것입니다.

문제 접근 방법

구현 흐름은 다음과 같습니다. 먼저 arr1의 각 문자열을 순회하면서, 해당 문자열이 arr2의 문자열 중 하나라도 포함하고 있는지 확인합니다. 자바스크립트의 String.prototype.includes() 메서드를 사용하면 특정 문자열이 다른 문자열에 포함되어 있는지 손쉽게 판별할 수 있습니다. 조건을 만족하는 문자열만 결과 배열(res)에 추가하고, 모든 순회가 끝나면 sort() 메서드를 호출해 최종 결과를 사전순으로 정렬해 반환합니다.

예제 코드

이 문제를 해결하기 위한 코드는 다음과 같습니다 −

const lexicographicalSort = (arr1 = [], arr2 = []) => {
   let i, j;
   const res = [];
   outer: for (j = 0; j < arr1.length; j++) {
      for (i = 0; i < arr2.length; i++) {
         if (arr2[i].includes(arr1[j])) {
            res.push(arr1[j]);
            continue outer;
         };
      };
   }
   return res.sort();
};
const arr2 = ["lively", "alive", "harp", "sharp", "armstrong"];
const arr1 = ["xyz", "live", "strong"];
console.log(lexicographicalSort(arr1, arr2));

출력 결과

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

[ 'live', 'strong' ]

코드 설명

예제에서 arr1 = ["xyz", "live", "strong"], arr2 = ["lively", "alive", "harp", "sharp", "armstrong"]입니다. "xyz"는 arr2의 어떤 문자열에도 포함되어 있지 않으므로 제외되고, "live"는 "lively"와 "alive"에 포함되며, "strong"은 "armstrong"에 포함됩니다. 따라서 결과 배열에는 ["live", "strong"]이 담기게 되며, 이미 사전순으로 정렬된 상태로 반환됩니다.

또한 코드 내의 continue outer; 구문은 레이블(label)을 활용한 것으로, 조건을 만족하는 요소를 찾으면 안쪽 반복문 전체를 건너뛰고 바로 바깥쪽 반복문의 다음 요소로 넘어가도록 해줍니다. 이를 통해 불필요한 중복 검사를 줄일 수 있습니다.