2016-08-18 36 views
0

我一步一步來避免一些誤解。如何使用JS動態組合所有提供的陣列

簡介:

比方說,我有兩個數組。

var arr1= ['a', 'b', 'c']; 
var arr2= ['d', 'e', 'f']; 

,我需要從這個兩個數組的所有組合只有一個規則,那就是陣列之間的組合應該是從來沒有內部數組。 在我的例子上述輸出中應該是:

ad, ae, af, bd, be, bf, cd, ce, cf 

示例代碼:

我測試這樣的代碼,其提供了我期待的結果

var combinations = []; 
arr1.forEach(function(a1){ 
    arr2.forEach(function(a2){ 
    combinations.push(a1 + a2); 
    }); 
}); 

這聲音很容易但它需要我同時形象出來。而現在我面對另一個問題,我無法在更長的時間後解決。

數組數由用戶生成。所以在這個兩個數組的代碼中,這個簡單的例子可以工作,但如果用戶說他想組合3個數組呢?甚至更多10個陣列?

的問題是:

如何動態地combinate所有陣列的用戶提供?

+0

究竟是如何的用戶提供了陣列? – Teemu

+0

他提供了一些數組的ID,JS解析他的輸入並使用存儲。所以他沒有指定數組它自己 – Andurit

+0

當用戶提供3個數組時,預期的結果是什麼樣的? – Lewis

回答

0

嘗試使用二維數組或列表。你會發現你將有多少個數組(用戶輸入或計數器)並創建一個長數組。

然後循環通過一個在所述陣列的陣列後在陣列陣列的-,以及與每個這些陣列循環的每個陣列通過每一個陣列並運行或多或少相同combinations.push

0

你可以使用零件的可變長度和其長度迭代和遞歸方法。

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

0

用一個簡單的map reduce

'use strict'; 

let arr1= ['a', 'b', 'c'], 
    arr2= ['d', 'e', 'f']; 

let r = arr1.map((e) => { 
    return arr2.map((f) => { 
     return e + f; 
    }); 
}).reduce((a, b) => { 
    return a.concat(b); 
}); 

console.log(r); 
//Print [ 'ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf' ]