前端电商 sku 的全排列算法

  • 什么是sku
  • 聊聊常见的需求
  • 解决思路
    • 思路分解
    • 上代码

什么是sku

针对电商而言:

1、SKU是指一款商品,每款都有出现一个SKU,便于电商品牌识别商品。

2、一款商品多色,则是有多个SKU,例:一件衣服,有红色、白色、蓝色,则SKU编码也不相同,如相同则会出现混淆,发错货。

SKU,定义为保存库存控制的最小可用单位,例如纺织品中一个SKU通常表示:规格、颜色、款式。 STOCK KEEP UNIT,这是客户拿到商品放到仓库后给商品编号,归类的一种方法。

聊聊常见的需求

我们有三个数组分别为

let names = ["星途 XT", "星途 XTL"]let colors = ["黑色", "白色", "金色"]let displacement = ["1.5L", "1.5T", "1.8L", "1.8T"]

最终输出结果为

[["星途 XT","黑色","1.5L"],["星途 XT","黑色","1.5T"],["星途 XT","黑色","1.8L"],["星途 XT","黑色","1.8T"],["星途 XT","白色","1.5L"],["星途 XT","白色","1.5T"],["星途 XT","白色","1.8L"],["星途 XT","白色","1.8T"],["星途 XT","金色","1.5L"],["星途 XT","金色","1.5T"],["星途 XT","金色","1.8L"],["星途 XT","金色","1.8T"],["星途 XTL","黑色","1.5L"],["星途 XTL","黑色","1.5T"],["星途 XTL","黑色","1.8L"],["星途 XTL","黑色","1.8T"],["星途 XTL","白色","1.5L"],["星途 XTL","白色","1.5T"],["星途 XTL","白色","1.8L"],["星途 XTL","白色","1.8T"],["星途 XTL","金色","1.5L"],["星途 XTL","金色","1.5T"],["星途 XTL","金色","1.8L"],["星途 XTL","金色","1.8T"]
]

由于这些属性数组是不定项的,所以不能使用简单的三重暴力循环来解决这个需求了

解决思路

我们采取递归回溯法来解决这个问题,那么最重要的问题就是设计我们的递归函数

思路分解

以上文所举的例子来说,比如我们目前的属性数组就是:names、colors、displacement,首先我们会处理 names 数组,很显然对于每个属性数组,都需要去遍历它,然后一个一个选择后再去和 下一个数组的每一项进行组合。
我们设计的递归函数接受两个参数:

index 对应当前正在处理的下标,是 names 还是 colors 或是 displacement。
prev 上一次递归已经拼接成的结果,比如 ['星途 XT, ‘黑色’]。
进入递归函数:

  1. 处理属性数组下标为0: 假设在第一次 星途 XT, 那此时我们有一个未完成的结果状态,假设我们叫它prev, 此时prev = [“星途 XT”].

  2. 处理属性数组的下标1: 那么就处理到 colors 数组的了,并且我们拥有 prev,在遍历 colors 的时候继续递归的去把 prev 拼接成 prev.concat(color),也就是 [‘星途 XT’, ‘黑色’] 这样继续把这个 prev 交给下一次递归。

  3. 处理属性数组的下标2:那么就处理到 displacement 数组的了,并且我们拥有了 name + color 的 prev,在遍历 displacement 的时候继续递归的去把 prev 拼接成 prev.concat(displacement),也就是 [‘星途 XT’, ‘黑色’, ‘1.5L’],并且此时我们发现处理的属性数组下标已经到达了末尾,那么就放入全局的结果变量 res 中,作为一个结果。

上代码

 let names = ["星途 XT", "星途 XTL"]let colors = ["黑色", "白色", "金色"]let displacement = ["1.5L", "1.5T", "1.8L", "1.8T"]let combine = function (...chunks) {console.log(chunks, 'chunks')let res = []let helper = function (chunkIndex, prev) {let chunk = chunks[chunkIndex]let isLast = chunkIndex === chunks.length - 1// 循环每个属性数组for (let val of chunk) {let cur = prev.concat(val)if (isLast) {// 如果已经处理到数组的最后一项了 则把拼接的结果放入返回值中res.push(cur)} else {helper(chunkIndex + 1, cur)}}}// 从属性数组下标为 0 开始处理// 并且此时的 prev 是个空数组helper(0, [])return res}console.log(combine(names, colors, displacement))


第一次进入递归流程。剩余流程可脑补

前端电商 sku 的全排列算法相关推荐

  1. 前端电商 SKU 的全排列算法很难吗?学会这个套路,彻底掌握排列组合。

    前言 前段时间在掘金看到一个热帖 <今天又懒得加班了,能写出这两个算法吗?带你去电商公司写商品中心>,里面提到了一个比较有意思故事,大意就是一个看似比较简单的电商 sku 的全排列组合算法 ...

  2. 【转载】前端电商 sku 的全排列算法

    需求 需求描述起来很简单,有这样三个数组: let names = ["iPhone X", "iPhone XS"] let colors = [" ...

  3. 想进某电商公司?建议学会电商 sku 的全排列算法!

    前言 前段时间在掘金看到一个热帖 <今天又懒得加班了,能写出这两个算法吗?带你去电商公司写商品中心>,里面提到了一个比较有意思故事,大意就是一个看似比较简单的电商 sku 的全排列组合算法 ...

  4. JS每日一题:前端电商 sku 全排列的递归回溯算法

    本文内容:https://github.com/sl1673495/blogs/issues/50 需求 需求描述起来很简单,有这样三个数组: let names = ["iPhone X& ...

  5. Vue 的电商 SKU 表单配置组件

    下载地址Vue 的电商 SKU 表单配置组件,多条件筛选计算价格和库存. dd:

  6. spu是什么计算机软件,电商sku和spu的区别

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 电商sku和spu的区别是: 1.SPU:标准化产品单元.SPU=Standard Product Unit(标准化产品单元).S ...

  7. 基于Vue实现电商SKU组合算法问题

    这个相对来说比较麻烦,还涉及到了下面"属性图片"的循环,但关键点还是在SKU组合的代码上面 以下是基于element-ui和vue的精简版demo代码: html <div& ...

  8. 电商sku组合查询状态细究与实现

    作者 | 朱徽 最近做到一个需求,需要做一个类似于京东或者淘宝等电商的商品详情页,其中有一个功能就是商品SKU的选择查询问题 如上图,网络类型.机身颜色.套餐类型.存储容量这些每一个都是一个 SKU属 ...

  9. 小兔鲜儿Vue3.0前端电商项目实战

    小兔鲜儿Vue3.0实现了电商平台主线业务功能,电商首页.一级分类.二级分类.商品详情.购物车.结算.支付.个人中心.订单管理.订单详情. 项目采用前后端分离模式,前台使用了VUE3.0技术栈构建,自 ...

最新文章

  1. 聊一聊我认识的Linux系统
  2. 这个能快速发表Cell,Nature,Molecular cell的分析技术你要错过吗?
  3. JAVASCRIPT学习笔记----Javascript引用类型
  4. 在 k8s 上最小化安装 KubeSphere
  5. 【清北学堂】 死亡(death)
  6. 基于WF4的新平台-流程模式-(9)表单路由启动传入
  7. 一次由于网卡流量跑满引起的服务器丢包总结(sar命令排查)
  8. discuz mysql data_discuz调取数据库数据
  9. iMazing有哪些好用的功能
  10. redis 主从原理
  11. 最保值电子产品绝对是它:后悔没多收几台
  12. 十天学会php之第七天
  13. 高校固定资产折旧使用计算机,高校固定资产管理系统功能介绍
  14. 学习笔记 java学习(三)
  15. 高通MSM8998芯片数据资料参考
  16. 知乎上的一道问题:出家人怎么解决性欲?
  17. html怎么复制一行,js实现复制,删除一行div或一行table
  18. 华为云官网负责人明哥:我们是如何做到门面不倒,8个月挑战业界翘楚?
  19. 宽带运维用户侧故障案例分享
  20. 新冠疫情后智慧城市面临的挑战和发展机遇

热门文章

  1. 海伦司上市:“酒局文化”可以没有,但酒馆文化说来话长
  2. 开发APP的流程是怎样的
  3. 腾讯音乐的2021主基调:稳与变
  4. 名帖202 米芾 行书《主家林馆帖》
  5. 9-内存空间和名称空间
  6. 开源项目推荐:OpenGL之开源库OpenSceneGraph
  7. PowerBI开发 第六章:数据网管
  8. githup用户名密码怎么看_最新tplink路由器如何设置密码 tplink路由器设置密码步骤【详解】...
  9. 前端get和post请求的入门总结
  10. linux删除dat文件内容,使用python删除.dat文件中的行和列