+-
获取一个数组的所有子集

代码如下:

function getSubSets([head, ...rest]) {
    // 如果是空数组直接返回空子集
    if (!head) return [[]];
    // 得到除第一个元素之外的子数组的所有子集
    const restSubSets = getSubSets(rest);
    // n个元素的子集就等于n-1个元素的子集合并上
    // n-1个元素的每一个子集加上第一个元素形成的集合
    return [
        ...restSubSets, // n-1个元素的子集
        ...restSubSets.map(set => [head, ...set]) // n-1个元素的每一个子集加上第一个元素形成的集合
    ];
}