从具有m个元素的n个数组生成JavaScript组合在JavaScript中,我很难想出从n个数组中生成包含m个元素的数组组合的代码。对于其他语言,我也看到过类似的问题,但答案包含了语法或库魔法,我不知道如何翻译。考虑以下数据:[[0,1], [0,1,2,3], [0,1,2]]3数组,其中包含不同数量的元素。我想要做的是通过组合每个数组中的一个项来获得所有的组合。例如: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诸若此类。如果数组的数目是固定的,那么就很容易实现硬编码。但是数组的数量可能有所不同:[[0,1], [0,1]][[0,1,3,4], [0,1], [0], [0,1]]任何帮助都将不胜感激。
3 回答
慕慕森
TA贡献1856条经验 获得超17个赞
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贡献1862条经验 获得超7个赞
您可以通过构建子数组来采取迭代的方法。
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; }
添加回答
举报
0/150
提交
取消