IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 电商后台开发之商品规格组合算法 -> 正文阅读

[游戏开发]电商后台开发之商品规格组合算法

前言

?最近接了私活,关于器械商城的项目,最后收尾阶段,发现发布商品还是存在着问题,对于多个相同/不同的商品规格输出成商品时,需要依据规格名对规格值进行排列组合,保证所有规格值都可以进行选择。

核心代码部分

数据结构

      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/53893125
      var productsIndex = 0;
      var products = [];
      // 所有的的相同的规格名数组的二级数组
      var combination = [];
      // 所有分类的长度
      var n = specValues.length;
      // 根据specValues的长度初始化出所有的combination
      for (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,赋值下一个products
        productsIndex++;

        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;
    };

?每当我们修改规格时,例如规格的删除/编辑/添加,都需要调用此方法进行重新输出商品。

效果展示

请添加图片描述

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 23:02:30  更:2022-04-07 23:04:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 20:51:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码