Menu
CoddyTech

子集与超集

本课属于 Coddy JavaScript 学习旅程的“逻辑与流程”单元。第 40 课,共 65 课。

如果 A 中的每个元素也都是 B 中的元素,那么集合 A 是集合 B 的子集。反过来,如果 B 包含 A 中的所有元素,那么 B 是 A 的超集。

如果两个集合包含完全相同的元素,它们就是相等的。例如,我们来创建一些测试:

const setA = new Set([1, 2, 3]);
const setB = new Set([1, 2, 3, 4, 5]);
const setC = new Set([1, 2, 3]);
const setD = new Set([6, 7, 8]);

用于检查 setA 是否为 setB 子集的函数:

function isSubset(setA, setB) {
  return [...setA].every(element => setB.has(element));
}

用于检查 setA 是否为 setB 超集的函数:

function isSuperset(setA, setB) {
  return isSubset(setB, setA);
}

用于检查两个集合是否相等的函数:

function areEqual(setA, setB) {
  return setA.size === setB.size && isSubset(setA, setB);
}

测试子集关系:

// A 是 B 的子集吗? 
isSubset(setA, setB) // true
// B 是 A 的子集吗? 
isSubset(setB, setA) // false
// D 是 B 的子集吗? 
isSubset(setD, setB) // false

测试超集关系:

// B 是 A 的超集吗?
isSuperset(setB, setA) // true
// A 是 B 的超集吗?
isSuperset(setA, setB) // false

测试相等性:

// A 等于 C 吗?
areEqual(setA, setC) // true
// A 等于 B 吗?
areEqual(setA, setB) // false
// A 等于 D 吗?
areEqual(setA, setD) // false
challenge icon

挑战

简单

创建一个名为 analyzeSetRelations 的函数,它接受两个数组作为参数:arr1 和 arr2。该函数应将数组转换为集合,并返回一个包含以下属性的对象:

  • isSubset:一个布尔值,表示 set1 是否为 set2 的子集
  • isSuperset:一个布尔值,表示 set1 是否为 set2 的超集
  • isEqual:一个布尔值,表示 set1 和 set2 是否包含完全相同的元素

亲手试试

function analyzeSetRelations(arr1, arr2) {
    let set1 = new Set(arr1);
    let set2 = new Set(arr2);

    // 使用 .every() 和 .has() 检查集合之间的关系
    let isSubset = false;   // TODO: 检查 set1 中的每个元素是否都存在于 set2 中
    let isSuperset = false; // TODO: 检查 set2 中的每个元素是否都存在于 set1 中
    let isEqual = false;    // TODO: 检查两个集合的大小是否相同,且 isSubset 是否为 true

    return {
        isSubset: isSubset,
        isSuperset: isSuperset,
        isEqual: isEqual
    };
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: JavaScript 在线编译器