(A⊆U) 判断A是否为U的子集
isSubset
函数签名
typescript
function isSubset(...args: Parameters<typeof getArraySubset>): boolean描述
(A⊆U) 判断A是否为U的子集
参数
| 参数名 | 类型 | 可选 | 默认值 | 描述 |
|---|---|---|---|---|
args | Parameters<typeof getArraySubset> | 是 | - | - |
返回值
boolean
点击查看源码
js
/**
* (A⊆U) 子集
*
* @template T - 数组元素类型
* @template K - 用于判断的属性键名类型
* @param {T[]} A - 待判断的子集数组
* @param {T[]} B - 全集数组
* @param {K} [key] - 可选的用于判断的属性键名
* @returns {T[]} 子集数组
*/
function getArraySubset(A, B, key) {
if (key) {
const universeSet = new Set(B.map((item) => item[key]));
return A.filter((item) => universeSet.has(item[key]));
}
return A.filter((item) => B.includes(item));
}
/**
* (A⊆U) 判断A是否为U的子集
*
* @template T - 数组元素类型
* @template K - 用于判断的属性键名类型
* @param {T[]} A - 待判断的子集数组
* @param {T[]} B - 全集数组
* @param {K} [key] - 可选的用于判断的属性键名
* @returns {boolean} 如果A是U的子集,则返回 true,否则返回 false。
*/
export function isSubset(...args) {
const [A, B, key] = args;
return Boolean(getArraySubset(A, B, key).length);
}ts
/**
* (A⊆U) 子集
*
* @template T - 数组元素类型
* @template K - 用于判断的属性键名类型
* @param {T[]} A - 待判断的子集数组
* @param {T[]} B - 全集数组
* @param {K} [key] - 可选的用于判断的属性键名
* @returns {T[]} 子集数组
*/
function getArraySubset<T, K extends keyof T>(A: T[], B: T[], key?: K): T[] {
if (key) {
const universeSet = new Set(B.map((item) => item[key]));
return A.filter((item) => universeSet.has(item[key]));
}
return A.filter((item) => B.includes(item));
}
/**
* (A⊆U) 判断A是否为U的子集
*
* @template T - 数组元素类型
* @template K - 用于判断的属性键名类型
* @param {T[]} A - 待判断的子集数组
* @param {T[]} B - 全集数组
* @param {K} [key] - 可选的用于判断的属性键名
* @returns {boolean} 如果A是U的子集,则返回 true,否则返回 false。
*/
export function isSubset(...args: Parameters<typeof getArraySubset>): boolean {
const [A, B, key] = args;
return Boolean(getArraySubset(A, B, key).length);
}如有错误,请提交issue :::