2014-05-14 55 views
1

对不起,如果这是重复的,但我还没有找到解决我的问题的方法。我有4组词,我需要创建4个所有可能的组合,但是保持组限制(即必须有来自每个组的单词并且不会从组中加倍)。创建所有可能的组合 - javascript

伪代码示例:

Group1 = [A1, A2] 
Group2 = [B1, B2] 
Group3 = [C1, C2] 
Group4 = [D1, D2] 

Result: 
A1 B1 C1 D1, 
A2 B1 C1 D1, 
A1 B2 C1 D1 ... 

Unacceptable: 
A1 A2 B1 C1, 
A1 B1 B2 C1 

我真的不知道从哪里开始是这样的。初始组是数组。

在此先感谢。

+0

看一看http://jsclass.jcoglan.com/set.html –

回答

2

这应该做的伎俩:

function cartesian() { 
    var r = [], arg = arguments, max = arg.length-1; //r=results, arg=the arrays you sent, max=number of arrays you sent 
    function helper(arr, i) {// this is a recursive function 
     for (var j=0, l=arg[i].length; j<l; j++) { //for 0 to the current array's length 
      var a = arr.slice(0); // clone array sent 
      a.push(arg[i][j]) // add string 
      if (i==max) { // reached 4 elements, add that as possibility 
       r.push(a); 
      } else // if its not 4, call recursive function sending the current possibility array and the following index of the array to choose from 
       helper(a, i+1); 
     } 
    } 
    helper([], 0); // this starts the recursive function, sending an empty array and index 0 (start with nothing from 0) 
    return r; // after recursive function ends, return possibilities 
}; 

Group1 = ["A1", "A2"] 
Group2 = ["B1", "B2"] 
Group3 = ["C1", "C2"] 
Group4 = ["D1", "D2"] 

console.log(cartesian(Group1,Group2,Group3,Group4)); 
+0

这看起来很有希望 - 小心一点解释给JS和CS新手? –

+0

那么,从这里拿走它:http://stackoverflow.com/questions/15298912/javascript-generating-combinations-from-n-arrays-with-m-elements。但将评论代码 – juvian

+0

谢谢,我的搜索错过了那一个。 –