基于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 相关文章推荐
JQuery 学习笔记 选择器之六
Jul 23 Javascript
25个好玩的JavaScript小游戏分享
Apr 22 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
Oct 23 Javascript
ie8本地图片上传预览示例代码
Jan 12 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
JS判断是否长按某一键的方法
Mar 02 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
Nov 09 Javascript
vue+vux实现移动端文件上传样式
Jul 28 Javascript
angular ng-model 无法获取值的处理方法
Oct 02 Javascript
javascript sort()对数组中的元素进行排序详解
Oct 13 Javascript
Node.js中console.log()输出彩色字体的方法示例
Dec 01 Javascript
微信小程序绘制半圆(弧形)进度条
Nov 18 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大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
JavaScript CSS 修改学习第四章 透明度设置
2010/02/19 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
js编写简单的计时器功能
2017/07/15 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
vue观察模式浅析
2018/09/25 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
2020/05/10 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
单利模式及python实现方式详解
2018/03/20 Python
python flask中静态文件的管理方法
2018/03/20 Python
django rest framework 自定义返回方式
2020/07/12 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
英国在线购买轮胎、预订汽车、汽车维修和装配网站:Protyre
2020/04/12 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
《金钱的魔力》教学反思
2014/02/24 职场文书
小学作文评语大全
2014/04/21 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
七年级作文之英语老师
2019/10/28 职场文书
关于的python五子棋的算法
2022/05/02 Python