2016-05-17 198 views
2

我试图将多维数组的所有元素结合起来以组合元素。Javascript - 组合多维数组的元素

例如如果我有

var array = [ 
     ['a'], 
     ['1', '2', '3', '4'], 
     ['A'] 
]; 

结果必须是这样的:

["a1A", "a2A", "a3A", "a4A"] 

我能实现这个结果与下面的代码:

var finalArray = []; 
    var f1 = 0; 

    for (var i = 0; i < array.length - 1; i ++) { 
     f1 = 0; 
     for (var j = 0; j < array[i].length; j ++) { 
       for (var k = 0; k < array[i + 1].length; k ++) { 
        if (finalArray[f1]) 
          finalArray[f1] += array[i + 1][k]; 
        else 
          finalArray[f1] = array[i][j] + array[i + 1][k]; 

        f1 ++; 
       } 
     } 
    } 

    console.log(finalArray); 

的问题是,如果我加入更多的元素到第一个或最后一个成员,它不按预期工作。

例如该阵列

var array = [ 
     ['a', 'b'], 
     ['1', '2', '3', '4'], 
     ['A'] 
]; 

回报:

["a1A", "a2A", "a3A", "a4A", "b1", "b2", "b3", "b4"] 

这应该是:

["a1A", "a2A", "a3A", "a4A", "b1A", "b2A", "b3A", "b4A"] 

任何帮助修复我的代码是高度赞赏。

回答

3

您可以使用迭代和递归方法对零件的长度和长度进行可变长度。

function combine(array) { 
 
    function c(part, index) { 
 
     array[index].forEach(function (a) { 
 
      var p = part.concat(a); 
 
      if (p.length === array.length) { 
 
       r.push(p.join('')); 
 
       return; 
 
      } 
 
      c(p, index + 1); 
 
     }); 
 
    } 
 

 
    var r = []; 
 

 
    c([], 0); 
 
    return r; 
 
} 
 

 
var result = combine([['a', 'b', 'c'], ['1', '2', '3', '4'], ['A', 'B']]); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

+1

谢谢龚如心,真的很感谢为 – nicmon