阵列的所有可能组合不重复?

时间:2014-03-27 19:22:16

标签: javascript arrays sorting

说我有和数组:

var arr = [1,2,3,4];

如何在不重复的情况下获得所有可能的组合?

例如:

// "2,1" wouldn't be valid because it's essentially "1,2"

1
1,2
1,2,3
1,2,3,4
2
2,3
2,3,4
3
3,4
4

1 个答案:

答案 0 :(得分:1)

您想要的并非所有可能的组合(subsets,缺少1,31,42,4),但所有subsequences。通过使用两个嵌套循环来开始和结束序列,您可以轻松地获得这些:

function subsequences(arr) {
    var res = [[]];
    for (var i=0; i<arr.length; i++)
        for (var j=i+1; j<=arr.length; j++)
            res.push(arr.slice(i, j));
    return res;
}

对于所有可能的子集 - power set - 请参阅this answer