JavaScript - 笛卡尔积算法

笛卡尔积的定义:

假设集合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 计算

       

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值