JavaScript-从具有m个元素的n个数组生成组合
在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,1
0,0,2
0,1,0
0,1,1
0,1,2
0,2,0
0,2,1
0,2,2
等等。
如果数组的数目是固定的,则很容易进行硬编码实现。但是数组的数量可能会有所不同:
[[0,1], [0,1]][[0,1,3,4], [0,1], [0], [0,1]]
任何帮助将非常感激。
回答:
这是使用递归辅助函数的一个非常简单而简短的代码:
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]);
要使函数采用数组数组,只需将签名更改为,functioncartesian(arg)
从而将arg
其作为参数而不是allarguments
。
以上是 JavaScript-从具有m个元素的n个数组生成组合 的全部内容, 来源链接: utcz.com/qa/422242.html