JS - 笛卡尔积算法
笛卡尔积的定义
假设集合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 - 笛卡尔积算法相关推荐
- java 笛卡尔积 数组_在JS中笛卡尔积算法与多重数组笛卡尔积(详细教程)
这篇文章主要介绍了JS笛卡尔积算法与多重数组笛卡尔积实现方法,结合实例形式分析了javascript根据对象或数组生成笛卡尔积的相关操作技巧,需要的朋友可以参考下 本文实例讲述了JS笛卡尔积算法与多重 ...
- js排序算法详解-归并排序
js系列教程5-数据结构和算法全解 js排序算法详解-归并排序 归并排序其实可以类比二分法,二分法其实就是二等分的意思,简而言之就是不断和新序列的中间值进行比较.归并排序似乎有异曲同工之妙,什么意思呢 ...
- js排序算法详解-基数排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-基数排序 其实基数排序和桶排序挺类似的,都是找一个容器把属于同一类的元素装起来,然后进行排序.可以把基数排序类 ...
- js排序算法详解-桶排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-桶排序 一看到这个名字就会觉得奇特,几个意思,我排序还要再准备几个桶不成?还真别说,想用桶排序还得真准备几个桶 ...
- js排序算法详解-计数排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-计数排序 计数排序就是遍历数组记录数组下的元素出现过多次,然后把这个元素找个位置先安置下来,简单点说就是以原数 ...
- js排序算法详解-堆排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-堆排序 这种排序方式呢,理论性太强,看动图的时候满脸写着懵逼,多看几遍似乎明白了编者的意图,但是要把这种理论的 ...
- js排序算法详解-快速排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-快速排序 既然是快速排序,那顾名思义一定很快,快的连小编都被懵逼了好几圈!建议先不要看动图,先看第一种写法: ...
- js排序算法详解-希尔排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-希尔排序 希尔排序,直接上图: 像这个算法看图理解起来并不是很难,就像比赛一样,1-6一组,2-7一组,每差5 ...
- js排序算法详解-选择排序
全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-选择排序 相对于冒泡排序还有一种类似的方法就是选择排序,顾名思义就是选择性排序,什么意思呢? 这么来理解,假设 ...
最新文章
- centos下axel安装与使用
- MySQL中truncate误操作后的数据恢复案例
- Error:(3, 32) java: 程序包org.springframework.boot不存在
- .Net语言 APP开发平台——Smobiler学习日志:如何快速实现类似于微信的悬浮显示二维码效果...
- pycharm显示全部数据_PyCharm第一次安装及使用教程
- 【收藏】需求文档(PRD)终极撰写指南
- centos安装桌面和远程连接
- linux getline函数用法,Linux文本处理三剑客之awk学习笔记05:getline用法详解
- 网易视频云直播常见问题解析
- Java设计模式及类图
- 完全自学C(干货) —— 结构体初识
- etal斜体吗 参考文献_参考文献的标准格式
- funcode之c++版弹弹堂(第一个设计实验)
- 分布式事务—Lec12课前资料
- Android使用NFC模拟IC卡
- 华为链路聚合(路由器和交换机)
- 【雕爷学编程】Arduino动手做(73)---TM1637四位数码管
- HttpClient如何进行ssl连接呢?
- iOS 加载、滑动翻阅大量图片解决方案详解
- [buuctf]crypto刷题学习记录(1-22)
热门文章
- GBase 8a的SNMP Trap 告警
- 计算机如何永久删除文件无法找回,电脑文件永久性删除了怎么办?简单五招教你恢复...
- 设计 QQ、微信、微博、Github 等第三方账号登陆
- 一个想法照进现实-《IT连》创业项目:关于团队组建
- 克隆linux虚拟机密码是多少,Linux虚拟机的克隆及问题处理
- div标签和span标签区别
- 重构之美-浴火重生的火凤凰CSS3【前传:Gradient】
- 浅谈来自德国的电子分类系统eCl@ss
- VirtualBox下Ubuntu 20.04全屏显示
- ae打开模板显示不出来_打开AE模板提示缺少rsmb pro插件的解决办法