Skip to content

@utilslib/core/isSubset


(A⊆U) 判断A是否为U的子集


isSubset

函数签名

typescript
function isSubset(...args: Parameters<typeof getArraySubset>): boolean

描述

(A⊆U) 判断A是否为U的子集

参数

参数名类型可选默认值描述
argsParameters<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 :::