我正在尝试在2D阵列的子阵列之间制作笛卡尔积。
我的2dArray是这样的:var matrix = [[1,2,3], [4,5], [6,7,8],[9,10,11]];
,但它可以有可变数量的数组。
我使用的功能是:
function cartesianProductOf() {
return Array.prototype.reduce.call(arguments, function(a, b) {
var ret = [];
a.forEach(function(a) {
b.forEach(function(b) {
ret.push(a.concat([b]));
});
});
return ret;
}, [[]]);
}
我尝试使用像cartesianProductOf(matrix)
这样的函数,但这不会返回任何结果。
我的问题是如何将子数组作为此函数的参数?如何在子数组中拆分2d数组或如何修改函数以适用于我的情况?
有谁知道如何解决这个问题?
更新 http://jsfiddle.net/XHEJt/10/
var matrix = [[1,2,3], [4,5], [6,7,8],[9,10,11]];
console.log(cartesianProductOf([1,2,3], [4,5], [6,7,8],[9,10,11]));
//the following line does not produce the same output
console.log(cartesianProductOf(matrix));
function cartesianProductOf() {
return Array.prototype.reduce.call(arguments, function(a, b) {
var ret = [];
a.forEach(function(a) {
b.forEach(function(b) {
ret.push(a.concat([b]));
});
});
return ret;
}, [[]]);
}
答案 0 :(得分:0)
当你询问带参数的函数调用(有效)和数组(不起作用)时,如果arguments.length
等于1,你可以插入一个检查,然后取第一个arguments
的元素作为减少的值。
return Array.prototype.reduce.call(arguments.length === 1
? arguments[0]
: arguments, function(a, b) {
// ...