共计 843 个字符,预计需要花费 3 分钟才能阅读完成。
幂集: 由汇合所有子集组成的汇合
function powerSet(a){const powerSet = new Set(new Set()); // 空集
for(const aValue of a){for(const set of new Set(powerSet)){powerSet.add(new Set(set).add(aValue));
}
}
return powerSet;
}
代码解析:
第 2 行代码是增加空集,
如果想在创立的同时初始化实例,则能够给 Set 构造函数传入一个可迭代对象,其中须要蕴含插入到新汇合实例中的元素 。const powerSet = new Set(new Set());
等价于 const powerSet = new Set(new Set([]));
传入的可迭代对象中的元素是要插入到新实例里去的。
// 留神看 s1 和 s2
const s1 = new Set([1]);
const s2 = new Set(s1);
s2;
//Set(1) {1}[[Entries]]0: 1 value: 1 size: (...)__proto__: Set
s1;
//Set(1) {1}[[Entries]]0: 1 value: 1 size: (...) __proto__: Set
const s3 = new Set();
const s4 = new Set([]);
s3;
//Set(0) {}
//[]
s4;
//Set(0) {}
//[]
如果 a = [1,2,3]
回到幂集函数上,第 2 行代码的 powerSet
为[[]]
第 1 次外循环,aValue = 1,
第 1 次内循环,new Set(powerSet)
为 [[]]
(把[]
作为插入到新实例的元素),于是 set 为 []
而后第 5 行代码,new Set(set)
等价于 new Set([])
, 即[]
。而后add(aValue)
得[1]
, 而后 powerSet
为[[],[1]]
幂集生成程序:
// 以 a = [1,2,3]
[[]]
[[],[1],[2],[1,2]]
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
正文完
发表至: javascript
2021-04-21