基于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 相关文章推荐
新浪的图片新闻效果
Jan 13 Javascript
javascript 获取select下拉列表值的代码
Sep 07 Javascript
Notify - 基于jquery的消息通知插件
Oct 18 Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 Javascript
jQuery实现购物车计算价格功能的方法
Mar 25 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
May 10 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
Jun 01 Javascript
浅谈react前后端同构渲染
Sep 20 Javascript
ES6知识点整理之对象解构赋值应用示例
Apr 17 Javascript
layui实现数据分页功能
Jul 27 Javascript
js canvas实现星空连线背景特效
Nov 01 Javascript
JavaScript实现文件下载并重命名代码实例
Dec 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自定义函数收代码
2010/08/01 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
JS 面向对象的5钟写法
2009/07/31 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
jQuery实现图片信息的浮动显示实例代码
2013/08/28 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
phantomjs导出html到pdf的方法总结
2017/10/19 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
Django开发的简易留言板案例详解
2018/12/04 Python
对Python 中矩阵或者数组相减的法则详解
2019/08/26 Python
python操作cfg配置文件方式
2019/12/22 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
python绘图模块之利用turtle画图
2021/02/12 Python
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
影视制作岗位职责
2013/12/04 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
召开会议通知范文
2015/04/15 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
为什么node.js不适合大型项目
2021/04/28 Javascript