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


Posted in Javascript onMay 29, 2019

前段时间,公司要做“添加商品”业务模块,这也算是电商业务里面的一个难点了。

令我印象最深的不是什么“组合商品”、“关联商品”、“关联单品”,而是商品SKU的组合问题。

这个问题特别有意思,当时虽然大体上组合成功,总是有些小bug解决不了,然后手上又有别的任务就没仔细研究它。

后来过了一个月,空闲下来专门研究了下,终于把问题解决,有必要记录下这次体验。

先看下在业务中的效果(tips: 如看不清可放大浏览器)

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

这个相对来说比较麻烦,还涉及到了下面“属性图片”的循环,但关键点还是在SKU组合的代码上面

以下是基于element-ui和vue的精简版demo代码:

html:

<div>SKU组合demo</div>
<div v-for="(v, i) in list" :key="i" class="mt-20">
 <b>{{ v.name }}:</b>
 <el-checkbox-group v-model="checkList[i].list">
 <el-checkbox v-for="(k, j) in v.list" :key="j" :label="k" />
 </el-checkbox-group>
</div>
<div class="mt-20">
 <el-button type="primary" @click="handleClick">确定</el-button>
</div>
<div class="mt-20">
 <el-tag v-for="(item, index) in skuList" :key="index" style="margin:10px 10px;">{{ item }}</el-tag>
</div>

css:

.mt-20 {
 margin-top: 20px;
}

JS:

<script>
export default {
 data() {
 return {
  list: [
  { name: '尺码', list: ['S', 'M', 'L', 'XL', 'XXL'] },
  { name: '颜色', list: ['红色', '黄色', '蓝色', '粉色', '紫色'] },
  { name: '图案', list: ['猫咪', '人物', '飞机', '闪电', '字母'] }
  ],
  checkList: [
  { name: '尺码', list: [] },
  { name: '颜色', list: [] },
  { name: '图案', list: [] }
  ],
  skuArray: [],
  skuList: []
 }
 },
 methods: {
 handleClick() {
  // 先清空数据,保证连续点击按钮,数据不会重复
  this.skuArray = []
  this.skuList = []
  // 将选中的规格组合成一个大数组 [[1, 2], [a, b]...]
  this.checkList.forEach(element => {
  element.list.length > 0 ? this.skuArray.push(element.list) : ''
  })
  // 勾选了规格,才调用方法
  if (this.skuArray.length > 0) {
  this.getSkuData([], 0, this.skuArray)
  } else {
  this.$message.error('请先勾选规格')
  }
 },
 // 递归获取每条SKU数据
 getSkuData(skuArr = [], i, list) {
  for (let j = 0; j < list[i].length; j++) {
  if (i < list.length - 1) {
   skuArr[i] = list[i][j]
   this.getSkuData(skuArr, i + 1, list) // 递归循环
  } else {
   this.skuList.push([...skuArr, list[i][j]]) // 扩展运算符,连接两个数组
  }
  }
 }
 }
}
</script>

效果如下:

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

 只要是做电商的小伙伴应该都会遇到这个SKU组合问题吧,希望能对大家有所帮助!

总结

以上所述是小编给大家介绍的基于Vue实现电商SKU组合算法问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
URI、URL和URN之间的区别与联系
Dec 20 Javascript
13 个JavaScript 性能提升技巧分享
Jul 26 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
Feb 26 Javascript
JavaScript中字符串(string)转json的2种方法
Jun 25 Javascript
JS中的forEach、$.each、map方法推荐
Apr 05 Javascript
获取IE浏览器Cookie信息的方法
Jan 23 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
Mar 08 Javascript
javascript 数据存储的常用函数总结
Jun 01 Javascript
Vue2 配置 Axios api 接口调用文件的方法
Nov 13 Javascript
js实现rem自动匹配计算font-size的示例
Nov 18 Javascript
javascript中toFixed()四舍五入使用方法详解
Sep 28 Javascript
Vue项目引发的「过滤器」使用教程
Mar 12 Javascript
JS学习笔记之闭包小案例分析
May 29 #Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
May 29 #Javascript
elementUI select组件value值注意事项详解
May 29 #Javascript
elementUI select组件使用及注意事项详解
May 29 #Javascript
通过vue手动封装on、emit、off的代码详解
May 29 #Javascript
el-select数据过多懒加载的解决(loadmore)
May 29 #Javascript
JS学习笔记之原型链和利用原型实现继承详解
May 29 #Javascript
You might like
用PHP发电子邮件
2006/10/09 PHP
php操作MongoDB类实例
2015/06/17 PHP
PHP代码实现爬虫记录――超管用
2015/07/31 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
Extjs Gird 支持中文拼音排序实现代码
2013/04/15 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
JavaScript中Function详解
2015/02/27 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
JavaScript之underscore_动力节点Java学院整理
2017/07/03 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
讲解Python中fileno()方法的使用
2015/05/24 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
python中virtualenvwrapper安装与使用
2018/05/20 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
python 环境搭建 及python-3.4.4的下载和安装过程
2019/07/20 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
pycharm 对代码做静态检查操作
2020/06/09 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
大学优秀班集体申报材料
2014/05/23 职场文书
关爱老人标语
2014/06/21 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
优秀团队申报材料
2014/12/26 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书