我正在使用@Bergi发布的这个。它完美地完成任务。但我想传入一个数组变量,那就是它不起作用。所以而不是:
cartesian([0,1], [0,1,2,3], [0,1,2]);
相反:
var array =[[0,1], [0,1,2,3], [0,1,2]];
cartesian(array);
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]);
我真的想用一个对象数组来做这个,我也试过了,并得到了相同的结果,它只是返回原来的三个数组。我需要这样做,因为我将传递任意数量的任何长度数组。
答案 0 :(得分:3)
你想要.apply()
,它接受一组参数并将它们传递给一个函数。
cartesian.apply(null, array);
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;
}
var array = [
[0, 1],
[0, 1, 2, 3],
[0, 1, 2]
];
var r = cartesian.apply(null, array);
console.log(r);