基于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 相关文章推荐
javascript document.compatMode兼容性
Feb 23 Javascript
在js文件中写el表达式取不到值的原因及解决方法
Dec 23 Javascript
JavaScript使用循环和分割来替换和删除元素实例
Oct 13 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
Jul 28 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
基于webpack4搭建的react项目框架的方法
Jun 30 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
Sep 17 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
May 30 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
Feb 10 Javascript
如何实现echarts markline标签名显示自己想要的
Jul 20 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
mysql总结之explain
2012/02/27 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
php格式文件打开的四种方法
2018/02/24 PHP
javascript 数组排序函数
2009/08/20 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
JS实现六位字符密码输入器功能
2016/08/19 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
js实现简易ATM功能
2020/10/27 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
python django集成cas验证系统
2014/07/14 Python
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
Mac 上切换Python多版本
2017/06/17 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
pandas针对excel处理的实现
2021/01/15 Python
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
鼓励运动员的广播稿
2014/02/08 职场文书
硕士生工作推荐信
2014/03/07 职场文书
毕业设计致谢词
2015/05/14 职场文书
手把手教你导入Go语言第三方库
2021/08/04 Golang
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python
mysql函数之截取字符串的实现
2022/08/14 MySQL