定义

在数学中的解释是,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。

假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。

简单来说就是多组数据的排列组合


应用场景

  1. 在电商项目中,常用于商品SKU的订单组合;根据商品的子类型和不同颜色尺寸生成n种可能的组合
  2. MySql的多表查询
  3. 生成坐标
    …….

js代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function cartesianProduct (array) {
if (array.length < 2) return array[0] || [];

return [].reduce.call(array, function (col, set) {
var res = [];

col.forEach(function (c) {
set.forEach(function (s) {
var t = [].concat(Array.isArray(c) ? c : [c]);
t.push(s);
res.push(t);
})
});

return res;
});
}

cartesianProduct ([[1,2,3],['a','b','c'],["张三","李四","王五"]])

得到的结果:


其它实现方法