intersectionBy - Functional

두 배열의 각 배열 요소에 제공된 함수를 적용한 후 두 배열에있는 요소의 목록을 반환한다.

b의 모든 요소에 fn을 적용한 다음 Set에 Array.filter()를 사용하면 fn이 적용될 때 b에 포함 된 값을 생성하는 요소 만 유지할 수 있다.

const intersectionBy = (a, b, fn) => {
  const s = new Set(b.map((x) => fn(x)))
  return a.filter((x) => s.has(fn(x)))
}

// 예시
intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor) // [2.1]