炎炎設(shè)計(jì)
2019-07-02 17:33:30
從具有m個(gè)元素的n個(gè)數(shù)組生成JavaScript組合在JavaScript中,我很難想出從n個(gè)數(shù)組中生成包含m個(gè)元素的數(shù)組組合的代碼。對(duì)于其他語(yǔ)言,我也看到過(guò)類似的問(wèn)題,但答案包含了語(yǔ)法或庫(kù)魔法,我不知道如何翻譯。考慮以下數(shù)據(jù):[[0,1], [0,1,2,3], [0,1,2]]3數(shù)組,其中包含不同數(shù)量的元素。我想要做的是通過(guò)組合每個(gè)數(shù)組中的一個(gè)項(xiàng)來(lái)獲得所有的組合。例如:0,0,0 // item 0 from array 0, item 0 from array 1, item 0 from array 20,0,10,0,20,1,00,1,10,1,20,2,00,2,10,2,2諸若此類。如果數(shù)組的數(shù)目是固定的,那么就很容易實(shí)現(xiàn)硬編碼。但是數(shù)組的數(shù)量可能有所不同:[[0,1], [0,1]][[0,1,3,4], [0,1], [0], [0,1]]任何幫助都將不勝感激。
3 回答

慕慕森
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊
function cartesian() { var r = [], arg = arguments, max = arg.length-1; function helper(arr, i) { for (var j=0, l=arg[i].length; j<l; j++) { var a = arr.slice(0); // clone arr a.push(arg[i][j]); if (i==max) r.push(a); else helper(a, i+1); } } helper([], 0); return r;}
cartesian([0,1], [0,1,2,3], [0,1,2]);
function cartesian(arg)
arg
arguments
.

牧羊人nacy
TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以通過(guò)構(gòu)建子數(shù)組來(lái)采取迭代的方法。
var parts = [[0, 1], [0, 1, 2, 3], [0, 1, 2]],
result = parts.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []));
console.log(result.map(a => a.join(', ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }
添加回答
舉報(bào)
0/150
提交
取消