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
。