笛卡尔积的定义

假设集合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]);elseres.push([t, cv]);})})return res;})
}
console.log(calcDescartes(list));

参考博客:JavaScript 笛卡尔积算法,可用于商品 SKU 计算

JS - 笛卡尔积算法相关推荐

  1. java 笛卡尔积 数组_在JS中笛卡尔积算法与多重数组笛卡尔积(详细教程)

    这篇文章主要介绍了JS笛卡尔积算法与多重数组笛卡尔积实现方法,结合实例形式分析了javascript根据对象或数组生成笛卡尔积的相关操作技巧,需要的朋友可以参考下 本文实例讲述了JS笛卡尔积算法与多重 ...

  2. js排序算法详解-归并排序

    js系列教程5-数据结构和算法全解 js排序算法详解-归并排序 归并排序其实可以类比二分法,二分法其实就是二等分的意思,简而言之就是不断和新序列的中间值进行比较.归并排序似乎有异曲同工之妙,什么意思呢 ...

  3. js排序算法详解-基数排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-基数排序 其实基数排序和桶排序挺类似的,都是找一个容器把属于同一类的元素装起来,然后进行排序.可以把基数排序类 ...

  4. js排序算法详解-桶排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-桶排序 一看到这个名字就会觉得奇特,几个意思,我排序还要再准备几个桶不成?还真别说,想用桶排序还得真准备几个桶 ...

  5. js排序算法详解-计数排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-计数排序 计数排序就是遍历数组记录数组下的元素出现过多次,然后把这个元素找个位置先安置下来,简单点说就是以原数 ...

  6. js排序算法详解-堆排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-堆排序 这种排序方式呢,理论性太强,看动图的时候满脸写着懵逼,多看几遍似乎明白了编者的意图,但是要把这种理论的 ...

  7. js排序算法详解-快速排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-快速排序 既然是快速排序,那顾名思义一定很快,快的连小编都被懵逼了好几圈!建议先不要看动图,先看第一种写法: ...

  8. js排序算法详解-希尔排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-希尔排序 希尔排序,直接上图: 像这个算法看图理解起来并不是很难,就像比赛一样,1-6一组,2-7一组,每差5 ...

  9. js排序算法详解-选择排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-选择排序 相对于冒泡排序还有一种类似的方法就是选择排序,顾名思义就是选择性排序,什么意思呢? 这么来理解,假设 ...

最新文章

  1. centos下axel安装与使用
  2. MySQL中truncate误操作后的数据恢复案例
  3. Error:(3, 32) java: 程序包org.springframework.boot不存在
  4. .Net语言 APP开发平台——Smobiler学习日志:如何快速实现类似于微信的悬浮显示二维码效果...
  5. pycharm显示全部数据_PyCharm第一次安装及使用教程
  6. 【收藏】需求文档(PRD)终极撰写指南
  7. centos安装桌面和远程连接
  8. linux getline函数用法,Linux文本处理三剑客之awk学习笔记05:getline用法详解
  9. 网易视频云直播常见问题解析
  10. Java设计模式及类图
  11. 完全自学C(干货) —— 结构体初识
  12. etal斜体吗 参考文献_参考文献的标准格式
  13. funcode之c++版弹弹堂(第一个设计实验)
  14. 分布式事务—Lec12课前资料
  15. Android使用NFC模拟IC卡
  16. 华为链路聚合(路由器和交换机)
  17. 【雕爷学编程】Arduino动手做(73)---TM1637四位数码管
  18. HttpClient如何进行ssl连接呢?
  19. iOS 加载、滑动翻阅大量图片解决方案详解
  20. [buuctf]crypto刷题学习记录(1-22)

热门文章

  1. GBase 8a的SNMP Trap 告警
  2. 计算机如何永久删除文件无法找回,电脑文件永久性删除了怎么办?简单五招教你恢复...
  3. 设计 QQ、微信、微博、Github 等第三方账号登陆
  4. 一个想法照进现实-《IT连》创业项目:关于团队组建
  5. 克隆linux虚拟机密码是多少,Linux虚拟机的克隆及问题处理
  6. div标签和span标签区别
  7. 重构之美-浴火重生的火凤凰CSS3【前传:Gradient】
  8. 浅谈来自德国的电子分类系统eCl@ss
  9. VirtualBox下Ubuntu 20.04全屏显示
  10. ae打开模板显示不出来_打开AE模板提示缺少rsmb pro插件的解决办法