在js中查找数组的所有子集

问题描述 投票:0回答:1

这里我编写了一个程序,它将找到所有子集数组,就像数组是

[1, 2, 3]
一样,我想要像
[[], 2],, 2, , [2, 1], 3, , [3, 1], [3, 2], [3

这样的输出

我编写了一个表示二进制逻辑表示的程序。输出没有达到预期。

您能纠正和修改那个程序吗?

const getAllSubsets = arr => {
    let n = arr.length
    let add = []
    for (let i = 0; i < (1 << n); i++) {
        for (let j = 0; j < n; j++) {
            if ((1 << j) & i) {
                add.push([arr[j]])
            }
        }
    }

    return add
}
      
console.log(getAllSubsets([1,2,3]))

javascript arrays data-structures
1个回答
-1
投票

您可以采用递归方法并获取具有未定义加上其余部分以及值加上其余部分的数组。

const
    getAllSubsets = ([value, ...rest]) => {
       const sub = rest.length ? getAllSubsets(rest) : [[]];
       return [
           ...sub.flatMap(a => [[undefined, ...a]]),
           ...sub.flatMap(a => [[array[0], ...a]]),
       ];
    };

console.log(getAllSubsets([1, 2, 3]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

© www.soinside.com 2019 - 2024. All rights reserved.