基于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 相关文章推荐
js去空格技巧分别去字符串前后、左右空格
Oct 21 Javascript
不使用ajax实现无刷新提交表单
Dec 21 Javascript
html的DOM中document对象forms集合用法实例
Jan 21 Javascript
JAVA四种基本排序方法实例总结
Jul 24 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
Aug 28 Javascript
7个去伪存真的JavaScript面试题
Jan 07 Javascript
jQuery选择器之表单元素选择器详解
Sep 19 jQuery
vue 中swiper的使用教程
May 22 Javascript
详解angular2 控制视图的封装模式
Dec 27 Javascript
js实现盒子移动动画效果
Aug 09 Javascript
微信小程序连续签到7天积分获得功能的示例代码
Aug 20 Javascript
js中复选框的取值及赋值示例详解
Oct 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验证码函数的使用示例
2013/05/03 PHP
农历与西历对照
2006/09/06 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
浅析return false的正确使用
2013/11/04 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
基于js文件加载优化(详解)
2018/01/03 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
python计算N天之后日期的方法
2015/03/31 Python
通过实例学习Python Excel操作
2020/01/06 Python
详解python安装matplotlib库三种失败情况
2020/07/28 Python
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
环境工程求职简历的自我评价范文
2013/10/24 职场文书
饭店工作计划书
2014/01/10 职场文书
个人求职信范例
2014/01/29 职场文书
安全技术说明书
2014/05/09 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
公司捐书倡议书
2015/04/27 职场文书
初中重阳节活动总结
2015/05/05 职场文书
告知书格式
2015/07/01 职场文书
八年级作文之友情
2019/11/25 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python
Golang 编译成DLL文件的操作
2021/05/06 Golang
Python中else的三种使用场景
2021/06/16 Python
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers