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 2

0,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

回到顶部