超集是指一个包含另一个集合的所有元素(甚至可能更多)的集合。集合不考虑重复项,可以使用Set来保证所有元素的唯一性。然后,将Array.prototype.every() 于 Set.prototype.has() 结合起来检查所有元素。
如果要判断是否是子集,只要将参数顺序交换一下就可以了。请注意,您可以使用此函数处理任何类型的可迭代对象,而不仅仅是数组。
const superset = (a, b) => {
const sA = new Set(a), sB = new Set(b);
return [...sB].every(v => sA.has(v));
};
const subset = (a, b) => superset(b, a);
superset([1, 2, 3, 4], [1, 2, 2]); // true
superset([1, 2, 3, 4], [1, 3, 5]); // false
subset(new Set([1, 2]), new Set([1, 2, 3, 4])); // true
subset(new Set([1, 5]), new Set([1, 2, 3, 4])); // false