vue前端sku实现

this.value.skuStockList = [];let skuList = this.value.skuStockList;//只有一个属性时if (this.selectProductAttr.length === 1) {let attr = this.selectProductAttr[0];for (let i = 0; i < attr.values.length; i++) {skuList.push({spData: JSON.stringify([{key:attr.name,value:attr.values[i]}])});}} else if (this.selectProductAttr.length === 2) {let attr0 = this.selectProductAttr[0];let attr1 = this.selectProductAttr[1];for (let i = 0; i < attr0.values.length; i++) {if (attr1.values.length === 0) {skuList.push({spData: JSON.stringify([{key:attr0.name,value:attr0.values[i]}])});continue;}for (let j = 0; j < attr1.values.length; j++) {let spData = [];spData.push({key:attr0.name,value:attr0.values[i]});spData.push({key:attr1.name,value:attr1.values[j]});skuList.push({spData: JSON.stringify(spData)});}}} else {let attr0 = this.selectProductAttr[0];let attr1 = this.selectProductAttr[1];let attr2 = this.selectProductAttr[2];for (let i = 0; i < attr0.values.length; i++) {if (attr1.values.length === 0) {skuList.push({spData: JSON.stringify([{key:attr0.name,value:attr0.values[i]}])});continue;}for (let j = 0; j < attr1.values.length; j++) {if (attr2.values.length === 0) {let spData = [];spData.push({key:attr0.name,value:attr0.values[i]});spData.push({key:attr1.name,value:attr1.values[j]});skuList.push({spData: JSON.stringify(spData)});continue;}for (let k = 0; k < attr2.values.length; k++) {let spData = [];spData.push({key:attr0.name,value:attr0.values[i]});spData.push({key:attr1.name,value:attr1.values[j]});spData.push({key:attr2.name,value:attr2.values[k]});skuList.push({spData: JSON.stringify(spData)});}}}}

假设的选择属性数据

假设选择的商品属性如下(可以根据需要调整):
 

this.selectProductAttr = [{ name: "颜色", values: ["红色", "蓝色"] },{ name: "大小", values: ["S", "M"] },{ name: "材质", values: ["棉", "羊毛"] }
];

初始化部分

首先,代码初始化了一个空数组 skuStockList,并通过 skuList 引用指向该数组。

this.value.skuStockList = [];
let skuList = this.value.skuStockList;

这段代码的目的是为后续生成的 SKU 列表提供一个存储地方。

处理不同数量的属性

接下来,代码根据 this.selectProductAttr.length 的值判断当前有多少个属性被选择。根据属性的数量,代码将生成不同数量的组合 SKU。

1. 只有一个属性时

if (this.selectProductAttr.length === 1) {let attr = this.selectProductAttr[0]; // 获取第一个属性for (let i = 0; i < attr.values.length; i++) { // 遍历该属性的所有值skuList.push({spData: JSON.stringify([{ key: attr.name, value: attr.values[i] }])});}
}

执行过程:

  • 只有一个属性 "颜色",其值为 ["红色", "蓝色"]
  • 对这个属性的每一个值,生成一个 SKU 并推入 skuList

结果:

[{"spData": "[{\"key\":\"颜色\",\"value\":\"红色\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"蓝色\"}]"}
]

2. 有两个属性时

else if (this.selectProductAttr.length === 2) {let attr0 = this.selectProductAttr[0]; // 获取第一个属性let attr1 = this.selectProductAttr[1]; // 获取第二个属性for (let i = 0; i < attr0.values.length; i++) { // 遍历第一个属性的所有值if (attr1.values.length === 0) { // 如果第二个属性没有值skuList.push({spData: JSON.stringify([{ key: attr0.name, value: attr0.values[i] }])});continue; // 跳过当前循环,继续处理下一个第一个属性的值}for (let j = 0; j < attr1.values.length; j++) { // 遍历第二个属性的所有值let spData = [];spData.push({ key: attr0.name, value: attr0.values[i] }); // 添加第一个属性的值spData.push({ key: attr1.name, value: attr1.values[j] }); // 添加第二个属性的值skuList.push({spData: JSON.stringify(spData)});}}
}

执行过程:

  • 有两个属性 "颜色" 和 "大小",其中 "颜色" 有 ["红色", "蓝色"]"大小" 有 ["S", "M"]
  • 代码会生成两个属性的所有组合。即,遍历 "颜色" 的每一个值,并与 "大小" 的每个值进行配对。

结果:

[{"spData": "[{\"key\":\"颜色\",\"value\":\"红色\"},{\"key\":\"大小\",\"value\":\"S\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"红色\"},{\"key\":\"大小\",\"value\":\"M\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"蓝色\"},{\"key\":\"大小\",\"value\":\"S\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"蓝色\"},{\"key\":\"大小\",\"value\":\"M\"}]"}
]

3. 有三个属性时

else {let attr0 = this.selectProductAttr[0]; // 获取第一个属性let attr1 = this.selectProductAttr[1]; // 获取第二个属性let attr2 = this.selectProductAttr[2]; // 获取第三个属性for (let i = 0; i < attr0.values.length; i++) { // 遍历第一个属性的所有值if (attr1.values.length === 0) { // 如果第二个属性没有值skuList.push({spData: JSON.stringify([{ key: attr0.name, value: attr0.values[i] }])});continue; // 跳过当前循环,继续处理下一个第一个属性的值}for (let j = 0; j < attr1.values.length; j++) { // 遍历第二个属性的所有值if (attr2.values.length === 0) { // 如果第三个属性没有值let spData = [];spData.push({ key: attr0.name, value: attr0.values[i] }); // 添加第一个属性的值spData.push({ key: attr1.name, value: attr1.values[j] }); // 添加第二个属性的值skuList.push({spData: JSON.stringify(spData)});continue; // 跳过当前循环,继续处理下一个第二个属性的值}for (let k = 0; k < attr2.values.length; k++) { // 遍历第三个属性的所有值let spData = [];spData.push({ key: attr0.name, value: attr0.values[i] }); // 添加第一个属性的值spData.push({ key: attr1.name, value: attr1.values[j] }); // 添加第二个属性的值spData.push({ key: attr2.name, value: attr2.values[k] }); // 添加第三个属性的值skuList.push({spData: JSON.stringify(spData)});}}}
}

执行过程:

  • 有三个属性 "颜色""大小" 和 "材质",其值分别为:
    • "颜色"["红色", "蓝色"]
    • "大小"["S", "M"]
    • "材质"["棉", "羊毛"]
  • 代码会生成三个属性的所有组合。即,遍历 "颜色" 的每一个值,和 "大小""材质" 的每个值进行配对。

结果:

[{"spData": "[{\"key\":\"颜色\",\"value\":\"红色\"},{\"key\":\"大小\",\"value\":\"S\"},{\"key\":\"材质\",\"value\":\"棉\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"红色\"},{\"key\":\"大小\",\"value\":\"S\"},{\"key\":\"材质\",\"value\":\"羊毛\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"红色\"},{\"key\":\"大小\",\"value\":\"M\"},{\"key\":\"材质\",\"value\":\"棉\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"红色\"},{\"key\":\"大小\",\"value\":\"M\"},{\"key\":\"材质\",\"value\":\"羊毛\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"蓝色\"},{\"key\":\"大小\",\"value\":\"S\"},{\"key\":\"材质\",\"value\":\"棉\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"蓝色\"},{\"key\":\"大小\",\"value\":\"S\"},{\"key\":\"材质\",\"value\":\"羊毛\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"蓝色\"},{\"key\":\"大小\",\"value\":\"M\"},{\"key\":\"材质\",\"value\":\"棉\"}]"},{"spData": "[{\"key\":\"颜色\",\"value\":\"蓝色\"},{\"key\":\"大小\",\"value\":\"M\"},{\"key\":\"材质\",\"value\":\"羊毛\"}]"}
]

总结

  • 代码根据选择的商品属性数量动态生成不同数量的 SKU 组合。
  • 当属性数量为 1 时,生成一个包含该属性所有值的 SKU 列表。
  • 当属性数量为 2 时,生成包含这两个属性所有值的组合 SKU 列表。
  • 当属性数量为 3 时,生成包含三个属性的所有组合 SKU 列表。
  • 每一个 SKU 都是一个包含属性名和值的 JSON 字符串,保存在 skuStockList 中。

通过这些步骤,代码可以灵活地处理多属性商品的不同组合,最终生成不同的 SKU 列表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyspark基础准备

1.前言介绍 学习目标&#xff1a;了解什么是Speak、PySpark&#xff0c;了解为什么学习PySpark&#xff0c;了解课程是如何和大数据开发方向进行衔接 使用pyspark库所写出来的代码&#xff0c;既可以在电脑上简单运行&#xff0c;进行数据分析处理&#xff0c;又可以把代码无缝…

数据库基础(4) . 数据库结构

2.基础结构 2.1.结构及名称 数据库 database 表空间 tablespaces(Oracle) 表格 table 字段 column 记录 record 值 value 2.2.数据库 database 在配置文件中指定存放位置 # 设置mysql数据库的数据的存放目录 datadirD:\MySQL\mysql-8.0.16-winx64\data每个数据库对应…

Meme 币生态全景图分析:如何获得超额收益?

近期&#xff0c;BTC 再次突破 7 万美元大关&#xff0c;市场上贪婪指数再次达到 80&#xff0c;而 Meme 币往往是每次牛市冲锋的号角&#xff0c;比如 $GOAT 5 天内价格一度上涨超 1 万倍。通过对当前市场 TOP 25 Meme 币的交易数据分析&#xff0c;我们发现了几个值得关注的市…

数据结构之二叉树——堆 详解(含代码实现)

1.堆 如果有一个关键码的集合 K { &#xff0c; &#xff0c; &#xff0c; … &#xff0c;}&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中&#xff0c;则称为小堆( 或大堆 ) 。将根节点最大的堆叫做最大堆或大根堆&#xff0c;根节点最小的…

高级 <HarmonyOS主题课>构建华为支付服务的课后习题

五色令人目盲&#xff1b; 五音令人耳聋&#xff1b; 五味令人口爽&#xff1b; 驰骋畋猎&#xff0c;令人心发狂&#xff1b; 难得之货&#xff0c;令人行妨&#xff1b; 是以圣人为腹不为目&#xff0c;故去彼取此。 本篇内容主要来自&#xff1a;<HarmonyOS主题课>构建…

酒店民宿小程序,探索行业数字化管理发展

在数字化发展时代&#xff0c;各行各业都开始向数字化转型发展&#xff0c;酒店民宿作为热门行业也逐渐趋向数字、智能化发展。 对于酒店民宿来说&#xff0c;如何将酒店特色服务优势等更加快速运营推广是重中之重。酒店民宿小程序作为一款集结预约、房源管理、客户订单管理等…

猎板PCB2到10层数的科技进阶与应用解析

1. 单层板&#xff08;Single-sided PCB&#xff09; 定义&#xff1a;单层板是最基本的PCB类型&#xff0c;导线只出现在其中一面&#xff0c;因此被称为单面板。限制&#xff1a;由于只有一面可以布线&#xff0c;设计线路上有许多限制&#xff0c;不适合复杂电路。应用&…

Python网络爬虫入门篇!

预备知识 学习者需要预先掌握Python的数字类型、字符串类型、分支、循环、函数、列表类型、字典类型、文件和第三方库使用等概念和编程方法。 2. Python爬虫基本流程 a. 发送请求 使用http库向目标站点发起请求&#xff0c;即发送一个Request&#xff0c;Request包含&#xf…

gerrit 搭建遇到的问题

1、启动Apache&#xff0c;端口被占用 : AH00072: make sock: could not bind to address (0S 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。: AH00072: make sock: could not bind to address 0.0.0.:443 a AH00451: no listening sockets available, shutti…

提升安全上网体验:Windows 11 启用 DOH(阿里公共DNS)

文章目录 阿里公共 DNS 介绍免费开通云解析 DNS 服务Windows 编辑 DNS 设置配置 IPv4配置 IPv6 路由器配置 DNS 阿里公共 DNS 介绍 https://alidns.com/ 免费开通云解析 DNS 服务 https://dnsnext.console.aliyun.com/pubDNS 开通服务后&#xff0c;获取 DOH 模板&#xff0…

项目实战使用gitee

1.创建本地仓库 2.进行提交到本地仓库 创建仓库后在idea中会显示图标&#xff0c;点击绿色的√进行快速提交 3.绑定远程仓库 4.番外篇-创建gitee仓库 注意不要勾选其他

【大模型LLM面试合集】大语言模型架构_chatglm系列模型

chatglm系列模型 1.ChatGLM 1.1 背景 主流的预训练框架主要有三种&#xff1a; autoregressive自回归模型&#xff08;AR模型&#xff09;&#xff1a;代表作GPT。本质上是一个left-to-right的语言模型。通常用于生成式任务&#xff0c;在长文本生成方面取得了巨大的成功&a…

yolov8涨点系列之HiLo注意力机制引入

文章目录 HiLo 注意力介绍原理特点 yolov8增加CBAM具体步骤HiLo代码(1)在__init.py__conv.py文件的__all__内添加‘HiLo’(2)conv.py文件复制粘贴HiLo代码(3)修改task.py文件 yolov8.yaml文件增加HiLo注意力机制yolov8.yamlyolov8.yaml引入HiLo注意力机制 将 HiLo 注意力引入 Y…

ReactPress—基于React的免费开源博客CMS内容管理系统

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议&#xff0c;感谢Star。 ![ReactPress](https://i-blog.csdnimg.cn/direct/0720f155edaa4eadba796f4d96d394d7.png#pic_center ReactPress 是使用React开发的开源发布平台&…

金华迪加 现场大屏互动系统 mobile.do.php 任意文件上传漏洞复现

0x01 产品简介 金华迪加现场大屏互动系统是一种集成了先进技术和创意设计的互动展示解决方案,旨在通过大屏幕和多种交互方式,为观众提供沉浸式的互动体验。该系统广泛应用于各类活动、展览、会议等场合,能够显著提升现场氛围和参与者的体验感。 0x02 漏洞概述 金华迪加 现…

搭建支持国密GmSSL的Nginx环境

准备 1、服务器准备&#xff1a;本文搭建使用的服务器是CentOS 7.6 2、安装包准备&#xff1a;需要GmSSL、国密Nginx&#xff0c;可通过互联网下载或者从 https://download.csdn.net/download/m0_46665077/89936158 下载国密GmSSL安装包和国密Nginx安装包。 服务器安装依赖包…

直播系统搭建教程安装说明

需要安装的软件(宝塔【软件商店】中查找安装): 1.PHP7.0 ~ PHP7.3 需要安装的扩展:(宝塔【PHP管理】【安装扩展】中安装) *PDO PHP Extension * MBstring PHP Extension * CURL PHP Extension * Mylsqi PHP Extension * Redis PHP Extension * fileinfo PHP Extension …

有了这三个神器,就没有你找不到的资源

在这个信息丰富的时代&#xff0c;获取资源已成为日常生活的一部分。无论是技术文档、学习资料还是开源项目&#xff0c;快速准确地找到所需内容常常让人头疼。但今天&#xff0c;我将介绍三个强大的工具&#xff0c;帮助你轻松发现各种资源——从技术资料到影视音乐&#xff0…

Harbor的安装与使用

前言 通过 Harbor 项目地址 找到最新的 Release 版本 因为Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器。在使用的过程中&#xff0c;发现与containerd不能很好地兼容。所以我这边启用了原来的一套基于docker-cri 的K8S高可用服务&#xff08;3台AlmaLi…

fastbootd模式刷android固件的方法

1. fastbootd追根溯源 Google在Android 10上正式引入了动态分区机制来提升OTA的可扩展性。动态分区使能后&#xff1a;andorid系统可以在开机阶段动态地进行分区创建、分区销毁、分区大小调整等操作&#xff0c;下游厂商只需要规划好super分区的总大小&#xff0c;其内部的各个…