Skip to content

intersectionBy

mapper 함수가 반환하는 값을 기준으로, 두 배열의 교집합을 반환해요.

이 함수는 파라미터로 두 개의 배열과 mapper 함수를 받아요. mapper 함수로 각 배열의 요소들을 변환했을 때, 두 배열에 모두 포함되는 요소들로 이루어진 새로운 배열을 반환해요. 실제 구현을 살펴보면, 첫 번째 배열과 두 번째 배열을 mapper 가 반환하는 값을 기준으로 비교하여, 첫 번째 배열의 요소들 중 두 번째 배열에 없는 요소들을 제거해요.

인터페이스

typescript
function intersectionBy<T, U>(firstArr: T[], secondArr: U[], mapper: (item: T | U) => unknown): T[];

파라미터

  • firstArr (T[]): 비교할 첫 번째 배열.
  • secondArr (U[]): 비교할 두 번째 배열.
  • mapper ((item: T | U) => unknown): 비교하기 위해 요소를 새로운 값으로 변환할 함수.

반환 값

(T[]): 첫 번째 배열과 두 번째 배열을 mapper 가 반환하는 값을 기준으로 비교하여, 두 배열 모두에 포함되는 요소들만 포함하는 새로운 배열.

예시

typescript
const array1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
const array2 = [{ id: 2 }, { id: 4 }];
const mapper = item => item.id;
const result = intersectionBy(array1, array2, mapper);
// `mapper`로 변환했을 때 두 배열 모두에 포함되는 요소로 이루어진 [{ id: 2 }] 값이 반환되어요.

const array1 = [
  { id: 1, name: 'jane' },
  { id: 2, name: 'amy' },
  { id: 3, name: 'michael' },
];
const array2 = [2, 4];
const mapper = item => (typeof item === 'object' ? item.id : item);
const result = intersectionBy(array1, array2, mapper);
// `mapper`로 변환했을 때 두 배열 모두에 포함되는 요소로 이루어진 [{ id: 2, name: 'amy' }] 값이 반환되어요.

Lodash와의 호환성

es-toolkit/compat에서 intersectionBy를 가져오면 lodash와 호환돼요.

  • intersectionBy는 공통 요소를 찾기 위해 여러 개의 유사 배열 객체를 받을 수 있어요.
  • intersectionBy는 속성 키를 iteratee로 받을 수 있어요.
typescript
import { intersectionBy } from 'es-toolkit/compat';

const array1 = [1.2, 2.4, 3.6];
const array2 = [2.5, 3.7];
const array3 = [2.6, 3.8];
const result = intersectionBy(array1, array2, array3, Math.floor);
// 결과는 [2.4, 3.6]이에요. Math.floor를 적용한 후 공통 요소는 2와 3이에요.

const array1 = [{ x: 1 }, { x: 2 }, { x: 3 }];
const array2 = [{ x: 2 }, { x: 3 }, { x: 4 }];
const result = intersectionBy(array1, array2, 'x');
// 결과는 [{ x: 2 }, { x: 3 }]이에요. 이 요소들은 동일한 `x` 속성을 가지고 있어요.

const arrayLike1 = { 0: 'apple', 1: 'banana', 2: 'cherry', length: 3 };
const arrayLike2 = { 0: 'banana', 1: 'cherry', 2: 'date', length: 3 };
const result = intersectionBy(arrayLike1, arrayLike2);
// 결과는 ['banana', 'cherry']예요. 이 요소들은 두 유사 배열 객체에서 공통으로 존재해요.

MIT 라이선스에 따라 배포됩니다.