在Javascript中创建具有多个子数组的数组的所有组合

时间:2016-10-01 13:45:31

标签: javascript arrays

我正在尝试使用组合创建多个数组。

这是我的数组的样子:

GMSMapView

我尝试过一个看起来像这样的代码:

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"

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

1 个答案:

答案 0 :(得分:2)

只是连结而不是+

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

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

&#13;
&#13;
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));
&#13;
&#13;
&#13;