基于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 相关文章推荐
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
Mar 09 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
Apr 06 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
Dec 20 Javascript
再谈javascript原型继承
Nov 10 Javascript
JQuery中serialize() 序列化
Mar 13 Javascript
JavaScript中的setMilliseconds()方法使用详解
Jun 11 Javascript
详解AngularJS中的http拦截
Feb 09 Javascript
js判断登陆用户名及密码是否为空的简单实例
May 16 Javascript
js实现二级导航功能
Mar 03 Javascript
利用node.js如何创建子进程详解
Dec 09 Javascript
js canvas实现红包照片效果
Aug 21 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
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
php获取网页上所有链接的方法
2015/04/03 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
xml文档转换工具,附图表例子(hta)
2010/11/17 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
jquery提示效果实例分析
2014/11/25 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
Vue源码学习之关于对Array的数据侦听实现
2019/04/23 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
JS实现的碰撞检测与周期移动完整示例
2019/09/02 Javascript
Python 异常处理实例详解
2014/03/12 Python
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
浅析Python 中几种字符串格式化方法及其比较
2019/07/02 Python
pandas 如何分割字符的实现方法
2019/07/29 Python
python Kmeans算法原理深入解析
2019/08/23 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
小学毕业家长寄语
2014/01/19 职场文书
夜不归宿检讨书
2014/02/25 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers