笛卡尔积的定义:
假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。
使用场景:
计算出商品的SKU,SKU是英语中Stock Keeping Unit的缩写,直译过来就是存货单元。比如我们去买衣服,需要找到喜欢的款式,喜欢的颜色,还得找到自己的尺码——款式 + 颜色 + 尺码就是这里说的SKU,是我们识别产品所必须的,也是商场进出存的最小单元。
算法:
reduce()函数使用。ruduce()函数第一次计算时将数组的前两个元素进行”组合“(这里的组合可以是数值计算,字符串操作,数组操作,取决于你的使用场景),返回"组合”结果并于下一个元素进行同样的操作,直到最后一个元素操作完
var year = ['2019', '2020'];
var color = ['白色', '灰色', '蓝色'];
var size = ['S', 'M', 'L'];
var list = [year, color, size];
function calcDescartes(array) {
if (array.length < 2) return array[0] || [];
return array.reduce((total, currentValue) => {
let res = [];
total.forEach(t => {
currentValue.forEach(cv => {
if (t instanceof Array) // 或者使用 Array.isArray(t)
res.push([...t, cv]);
else
res.push([t, cv]);
})
})
return res;
})
}
console.log(calcDescartes(list));
参考博客:JavaScript 笛卡尔积算法,可用于商品 SKU 计算