2016-10-01 97 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

相關問題