Javascript找到所有组合,以便数组中的数字

时间:2015-07-16 19:03:53

标签: javascript arrays

假设我有一个数组:

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

我需要计算所有唯一可能的组合 按顺序 从此数组中使用尽可能多的数字,前提是每个数组都是唯一的。我不太关心价值观,而是关注匹配的矩阵矩阵:

[0, 2, 3]
[0, 2, 4]
[1, 2, 3]
[1, 2, 4]

我看了this answer,但是当我这样做时:

var arr = [1, 1, 2, 3, 3];
console.log(allPossibleCases(arr));

我明白了:

["1 1 2 3 3"]

根据该功能的作用,这是有道理的,但我一直无法根据自己的需要进行调整。

编辑:

请注意我所说的 IN ORDER 部分。这不是一整套排列,this question中没有一个答案可以解决我的问题。

1 个答案:

答案 0 :(得分:1)

对于使用this answer中的函数,您只需要使用Array.reduce这样的内容准备一下这个

var prepared = [1, 1, 2, 3, 3].reduce(function(acc,el,index){
    var cur = acc.map[el]; 
    if(!cur) { 
        acc.map[el] = cur = []; 
        acc.res.push(cur); 
    } 
    cur.push(index); 
    return acc; 
},{res:[],map:{}}).res;

prepared看起来像[[0,1],[2],[3,4]]

这里只是重复项目的组索引。