子集与超集
本课属于 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挑战
简单创建一个名为 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
};
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: JavaScript 在线编译器