isSubset
두 번째 인자로 주어지는 배열의 모든 요소를 첫 번째 인자의 배열이 완전히 포함하는지(부분집합) 여부를 boolean
으로 반환합니다.
배열 요소의 타입이 참조형인 경우, iteratee 함수 인자를 정의하여 비교 항목을 설정하는 것이 가능합니다.
Code
Interface
typescript
const isSubset = <T, U>(
superset: T[] | readonly T[],
subset: T[] | readonly T[],
iteratee?: (item: T) => U
) => boolean;
Usage
typescript
import { isSubset } from '@modern-kit/utils';
const superset = [1, 2, 3, 4];
const subset1 = [1, 3];
const subset2 = [1, 5];
isSubset(superset, subset1); // true
isSubset(superset, subset2); // false
typescript
import { isSubset } from '@modern-kit/utils';
const superset = ['1', 2, 3, 4];
const subset1 = ['1', 2, 3];
const subset2 = [1, '2', 3];
isSubset(superset, subset1); // true
isSubset(superset, subset2); // false
typescript
// 요소 타입이 배열인 경우
import { isSubset } from '@modern-kit/utils';
const superset = [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]];
const subset1 = [[0, 1, 2, 3, 4]];
const subset2 = [[0, 1, 7, 4, 9]];
isSubset(superset, subset1); // false, 요소가 참조형(배열)이므로, 주소값이 달라 false를 반환한다.
isSubset(superset, subset2, (arr) => arr[2]); // true ([2,7], [7])
isSubset(superset, subset2, (arr) => arr[3]); // false ([3,8], [4])
// 깊이가 2 이상의 오브젝트
import { isSubset } from '@modern-kit/utils';
const superset = [
{
name: 'Peter',
age: 13,
},
{
name: 'Aimee',
age: 25,
},
];
const subset1 = [
{
name: 'Aimee',
age: 25,
},
];
const subset2 = [
{
name: 'Peter',
age: 15,
},
];
isSubset(superset, subset1); // false, 요소가 참조형(객체)이므로, 주소값이 달라 false를 반환한다
isSubset(superset, subset1, (obj) => JSON.stringify(obj)); // true
isSubset(superset, subset2, (obj) => JSON.stringify(obj)); // false
isSubset(superset, subset2, (obj) => obj.name); // true, name으로 판단