Javascript - 组合多维数组的元素

时间:2016-05-17 12:26:04

标签: javascript arrays multidimensional-array

我试图将多维数组的所有元素组合在一起,以获得元素的组合。

e.g。如果我有

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"]

非常感谢任何修复我的代码的帮助。

1 个答案:

答案 0 :(得分: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>');