小伙伴最近在做一个数据处理分析的东东,中间有一个需要获取数组全部子集数组列表的需求,虽然ES6中增加了一种新的数据类型语法糖Set,不过还是没有提供获取集合子集的方法,所以,就自己写了一个,这里特别做一次记录,以方便下次自己使用。
如给定数组arr = [1,2,3],返回全部子集数组为[[1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]],如果返回长度为2的子集数组则返回值[[1,2], [1,3], [2,3]].
整体思路上,可以先获取特定长度子集的数组,然后对个长度子集列表做一个归并即可,示例代码如下。
1 | var arr = [1,2,3,4,5,6,7,8,9,10]; |
另一个只能获取全部子集列表,无法获取特定长度子集列表的版本:
1 | var arr = [1,2,3]; |
ps:
对于数组所有子集遍历, 还可以有另外一个思路, 比如数组有3个元素, 就构造一个9未的二进制数,每位表示一个元素,那么所有的子集就是000,001, 010,011,100,101,110,111这几种组合了, 和bitmap的类似的思维,依次对应一下就可以了。