2016-10-01 100 views
0

我想创建多个数组的组合。在Javascript中创建与多个子数组的数组的所有组合

这里是我的阵列看起来像:

var a1 = ["1", "2", "3"]; 
     var a2 = ["a", "b"]; 
     var a3 = ["q", "w", "e"]; 

     var a4 = [a1, a2, a3]; 

我已经试过一个代码,看起来像这样:

function allPossibleCases(a4) { 
       if (arr.length == 1) { 
       return arr[0]; 
       } else { 
       var result = []; 
       var allCasesOfRest = allPossibleCases(arr.slice(1)); // recur with the rest of array 
       for (var i = 0; i < allCasesOfRest.length; i++) { 
        for (var j = 0; j < arr[0].length; j++) { 
        // console.log(arr[0][j]); 
        // console.log(allCasesOfRest[i]); 
        result.push(arr[0][j] + allCasesOfRest[i]); 
        } 

       } 
       return result; 
       } 

     } 

这是我提供正确的组合,它看起来像这样:

Array (18) 
0 "1aq" 
1 "2aq" 
2 "3aq" 
3 "1bq" 
4 "2bq" 
5 "3bq" 
6 "1aw" 
7 "2aw" 
8 "3aw" 
9 "1bw" 
10 "2bw" 
11 "3bw" 
12 "1ae" 
13 "2ae" 
14 "3ae" 
15 "1be" 
16 "2be" 
17 "3be" 

但我想(所需的输出)它是这样的:

Array (18) 
    0 ["1", "a", "q"] 
    1 ["2","a","q"] 
    2 ["3","a","q"] 
    3 ["1","b","q"] 
    4 ["2","b","q"] 
    5 ["3","b","q"] 
    6 ["1","a","w"] 
    7 ["2","a","w"] 
    8 ["3","a","w"] 
    9 ["1","b","w"] 
    10 ["2","b","w"] 
    11 ["3","b","w"] 
    12 ["1","a","e"] 
    13 ["2","a","e"] 
    14 ["3","a","e"] 
    15 ["1","b","e"] 
    16 ["2","b","e"] 
    17 ["3","b","e"] 

基本上我试图实现的是组合数组而不是字符串。

+0

可能是错误的,但改变这一行result.push(ARR [0] [j]的+ allCasesOfRest [I]); to this result.push(Array.prototype.push.apply(arr [0] [j],allCasesOfRest [i])); –

+0

您可以使用您当前的代码并调用'result.split(“”)' – varontron

+0

我试过这些,但剂量似乎正在工作。还有其他建议吗? @varontron – user3201500

回答

2

只是CONCAT代替+

result.push([a4[0][j]].concat(allCasesOfRest[i])); 

得到你想要的东西。你有一个字符串和一个你想放在一起的数组 - 因为你可以把字符串放在一个数组中,然后用你得到的第二个数组连接该数组。

var a1 = ["1", "2", "3"]; 
 
var a2 = ["a", "b"]; 
 
var a3 = ["q", "w", "e"]; 
 

 
var a4 = [a1, a2, a3]; 
 

 
    function allPossibleCases(a4) { 
 
    if (a4.length == 1) return a4[0]; 
 
    
 
     var result = []; 
 
     var allCasesOfRest = allPossibleCases(a4.slice(1)); // recur with the rest of array 
 
     for (var i = 0; i < allCasesOfRest.length; i++) { 
 
     for (var j = 0; j < a4[0].length; j++) { 
 
     
 
      result.push([a4[0][j]].concat(allCasesOfRest[i])); 
 
     } 
 

 
     } 
 
     
 
     return result; 
 
     
 
    } 
 
    
 
    console.log(allPossibleCases(a4));

+0

你好,感谢你的回答,但现在我得到一个逗号之间这里是如何输出看起来像'[“1”,“a”,“,”,“q”],[“2”, “a”,“”,“q”],[“3”,“a”,“,”,“q”],[“1”,“b”,“,”,“q”], “2”,“b”,“”,“q”],[“3”,“b”,“,”,“q”],[“1”,“a”,“,”,“w “”,“”,“”,“a”,“,”,“w”],[“3”,“a”,“,”,“w”],[“1”,“b”,“ “,”w“] ....' – user3201500

+0

有没有什么建议?所以我可以删除这个? – user3201500

+0

对不起,没有注意到一个是数组。 – baao

相关问题