typeScript 版
function cartesianProductOf(...args: any[]) {
return args.reduce(
(total: any, current: any) => {
let ret = [] as any[];
total.forEach((a: any) => {
current.forEach((b: any) => {
ret.push(a.concat([b]));
});
});
return ret;
},
[[]]
);
}
cartesianProductOf(['紅色','黑色'],['衣服','褲子']);
javaScript ES6版
function cartesianProductOf(...args) {
return args.reduce(
(total, current) => {
let ret = [];
total.forEach(a => {
current.forEach(b => {
ret.push(a.concat([b]));
});
});
return ret;
},
[[]]
);
}
cartesianProductOf(['紅色','黑色'],['衣服','褲子']);
javaScript ES5版
function cartesianProductOf() {
return Array.prototype.reduce.call(
arguments,
function(total, current) {
let ret = [];
total.forEach(function(a) {
current.forEach(function(b){
ret.push(a.concat([b]));
});
});
return ret;
},
[[]]
);
}
cartesianProductOf(['紅色','黑色'],['衣服','褲子']);