这是使用递归辅助函数的一个非常简单而简短的代码:
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其作为参数而不是all
arguments。



