幂集:由汇合所有子集组成的汇合
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和s2const s1 = new Set([1]);const s2 = new Set(s1);s2;//Set(1) {1}[[Entries]]0: 1 value: 1 size: (...)__proto__: Sets1;//Set(1) {1}[[Entries]]0: 1 value: 1 size: (...) __proto__: Setconst 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]]