2016-05-17 7 views
2

多次元配列のすべての要素を結合して要素の組み合わせを作成しようとしています。Javascript - 多次元配列の要素を結合する

私は

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

を持っている場合、結果は以下のように見なければならない:私はより多くの要素を追加する場合は、問題がある

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); 

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

私は、次のコードで、この結果を実現することができ最初または最後のメンバーは、期待どおりに動作しません。例えば

このアレイ

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

関連する問題