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

JavaScript에서 배열 교집합을 구하는 가장 간단한 방법

JavaScript에서 두 배열의 교집합(intersection)을 구하는 가장 쉽고 효율적인 방법은 Set 객체와 filter() 메서드를 조합하는 것입니다. Set은 중복을 허용하지 않는 자료구조이며, has() 메서드로 특정 값의 존재 여부를 빠르게 확인할 수 있어 교집합 연산에 매우 적합합니다.

배열 교집합 예제 코드

아래 코드를 실행하면 두 배열에 공통으로 포함된 요소만 추출할 수 있습니다.

<html>
   <body>
      <script>
         let intersection = function(x, y) {
            x = new Set(x), y = new Set(y);
            return [...x].filter(k => y.has(k));
         };

         document.write(intersection([5,7,4,8], [3,9,8,4,3]));
      </script>
   </body>
</html>

실행 결과

4,8

첫 번째 배열 [5,7,4,8]과 두 번째 배열 [3,9,8,4,3]에 공통으로 존재하는 값은 4와 8이므로 위와 같은 결과가 출력됩니다.

코드 동작 원리

  1. new Set(x), new Set(y) : 두 배열을 각각 Set 객체로 변환하여 중복 요소를 제거하고, 이후 조회 성능을 높입니다.
  2. [...x] : 스프레드 연산자(spread operator)를 사용해 첫 번째 Set을 다시 배열로 펼칩니다.
  3. filter(k => y.has(k)) : 배열의 각 요소가 두 번째 Set에 존재하는지 검사하여, 존재하는 요소만 새로운 배열로 반환합니다.

이 방식의 장점

  • Sethas() 메서드는 평균 O(1)의 시간 복잡도를 가지므로, 배열의 includes()(O(n))를 사용하는 방법보다 대량의 데이터에서 훨씬 빠릅니다.
  • 중복된 값을 자동으로 제거해주기 때문에 결과 배열에 같은 값이 반복해서 나타나지 않습니다.
  • 코드가 짧고 직관적이라 유지보수하기 좋습니다.

이처럼 Setfilter()를 활용하면 단 몇 줄의 코드로 JavaScript에서 배열 교집합을 손쉽게 구현할 수 있습니다.