电商后台开发之商品规格组合算法
前言
最近接了私活,关于器械商城的项目,最后收尾阶段,发现发布商品还是存在着问题,对于多个相同/不同的商品规格输出成商品时,需要依据规格名对规格值进行排列组合,保证所有规格值都可以进行选择。
核心代码部分
数据结构
formState: {goods: {goodsSn: '', // 商品编号...xxx},// 商品规格specifications: [{specification: '规格',value: '标准',picUrl: '',},],// 商品库存products: [{// 商品规格列表specifications: [], price: 0,number: 0,url: '',},],}
转换代码
// 规格 To 产品const specToProduct = () => {// 如果规格的数组长度为0,有可能此时为删除方法,则直接删除库存这一列if (state.formState.specifications.length === 0) {state.formState.products = [];return;}// 根据specifications创建临时规格列表var specValues = [];// 数组的第一个规格值var spec = state.formState.specifications[0].specification;var values = [];values.push(0);for (var i = 1; i < state.formState.specifications.length; i++) {// 每一项的规格值const aspec = state.formState.specifications[i].specification;// 去归总所有规格名相同的下标// 如果当前项的规格值与遍历的规格值相同的话if (aspec === spec) {values.push(i);} else {// 如果不相同,先把目前的已经归总规格名完毕的临时数组,加入到所创建的临时规格表中specValues.push(values);// 切换curr规格值,再去进行下一次匹配spec = aspec;// 清空临时数组values = [];// 将当前的下标,加入到临时values,进行下一次归组values.push(i);}}// 将最后一组分类加入到临时规格表中specValues.push(values);// 根据临时规格列表生产货品规格// 算法基于 https://blog.csdn.net/tyhj_sf/article/details/53893125var productsIndex = 0;var products = [];// 所有的的相同的规格名数组的二级数组var combination = [];// 所有分类的长度var n = specValues.length;// 根据specValues的长度初始化出所有的combinationfor (var s = 0; s < n; s++) {combination[s] = 0;}// 初始化var index = 0;var isContinue = false;// 排列组合~do {var specifications= [];for (var x = 0; x < n; x++) {var z = specValues[x][combination[x]];// 推入每个规格的规格值specifications.push(state.formState.specifications[z].value);}products[productsIndex] = {id: productsIndex,specifications: specifications,price: 0,number: 0,sand: 0,integral: 0,url: '',};// ++index,赋值下一个productsproductsIndex++;index++;combination[n - 1] = index;for (var j = n - 1; j >= 0; j--) {if (combination[j] >= specValues[j].length) {combination[j] = 0;index = 0;if (j - 1 >= 0) {combination[j - 1] = combination[j - 1] + 1;}}}// 退出循环的标志isContinue = false;for (var p = 0; p < n; p++) {if (combination[p] !== 0) {isContinue = true;}}} while (isContinue);// 赋值state.formState.products = products;};
每当我们修改规格时,例如规格的删除/编辑/添加,都需要调用此方法进行重新输出商品。
效果展示
电商后台开发之商品规格组合算法相关推荐
- 电商后台设计:商品维护
编辑导语:商品在整个电商系统中处于核心位置,因此商品维护对于电商后台设计的重要性不言而喻,本文作者以此为出发点,和我们聊一聊在电商后台设计中关于商品维护的那些事. 对于电商系统来说,商品模块的维护可以 ...
- 字节 抖音电商后台开发日常实习 一二面面经(已凉)
恭喜发现宝藏!搜索公众号[TechGuide]回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经,目前已更新至美团.微软- 作者@TechGuide[全网同名] 背景 面试部门:字节抖音电商 面试时间 ...
- 【大型电商项目开发】商品上架-es应用到商品上架-35
一:商品上架 上架的商品才可以在网站展示. 上架的商品需要可以被检索. es是将数据保存到内存当中,所以我们不能将什么数据都保存到es当中,我们需要将重要的数据保存到es中.例如商品名称,规格型号,价 ...
- SpringBoot电商后台开发项目总结(1)
这篇文章是无关业务逻辑代码的基础配置 目录 一.相关配置 1. 数据库相关配置 2.日志系统相关配置 二.开发框架搭建 1.设置返回接口标准类 2.自定义异常枚举类 3. 自定义异常处理类 4. 全局 ...
- 【大型电商项目开发】商品服务之SPU检索SKU检索-29
一:spu检索 请求url:/product/spuinfo/list 1.编辑list接口 1)编辑SpuInfoController的list方法 /*** 列表*/@RequestMapping ...
- java 开发之商品规格属性(SKU)组合算法
java 开发之商品规格属性(SKU)组合算法 开发背景 一般在开发商城的时候都会遇到商品规格组合的问题, 在这个开发过程中就需要一套算法用来组合多个规格属性,用来给每个组合定一组封面图和价格 比如某 ...
- 基于Vue实现智慧社区电商后台管理系统
作者主页:编程指南针 作者简介:Java领域优质创作者.CSDN博客专家 .掘金特邀作者.多年架构师设计经验.腾讯课堂常驻讲师 主要内容:Java项目.前端项目.小程序开发.Python开发.大数据和 ...
- Axure通用版电商后台管理系统+通用版移动端商城商户端+电商管理系统+对账管理+消息管理+内容管理+运营管理、会员管理、订单管理、促销管理、财务管理+通用版商城前后端电商系统+电商用户数据大屏看板
作品介绍:Axure通用版电商后台管理系统+通用版移动端商城商户端+电商管理系统+对账管理+消息管理+内容管理+运营管理.会员管理.订单管理.促销管理.财务管理+通用版商城前后端电商系统+电商用户数据 ...
- 电商生鲜网站开发(四)——后台开发:商品模块-图片上传/多条件拼接sql
电商生鲜网站开发(四)--后台开发:商品模块-图片上传/多条件拼接sql 增加商品 上传图片 更新商品 删除商品 批量上下架 图片上传功能 文件名UUID 通用唯一识别码(Universally Un ...
最新文章
- linux snmp设置报警次数,CentOS/RHEL 6下禁止重复的SNMP连接日志
- 使用Nomad构建弹性基础架构: 容错和中断恢复
- QT pro文件解析
- python数据库增删改查_python实现数据库增删改查
- Swift - RunTime(动态性) 问题 浅析
- 未来 10 年,物联网将成为主流!
- delphi 的 pos 函数 对中文支持不好。
- 特斯拉model3中控屏怎么关_对话特斯拉首席设计师Franz:设计为效率服务
- STC15单片机使用AT命令的C语言编程
- 数据类型不一致: 应为 NUMBER, 但却获得 BINARY
- picgo设置gitee图床
- flash debug版本
- 【Python黑科技】背单词的小程序之我爱记单词(保姆级图文+实现代码)
- 超微服务器 通电自动启动,让主板一通电就自动开机的方法
- 原始股的股份怎么进行分红
- SaaS系统权限体系设计
- ABAP报表程序结构框架
- JAVA权重算法(如Dubbo的负载均衡权重)
- 字体图标 fa fa html5,Font Awesome 4.2.0的所有图标参考
- Unreal Engine 4 学习总动员读书笔记