vue前端sku實現(xiàn)的方法小結
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) }); } } } }
假設的選擇屬性數(shù)據
假設選擇的商品屬性如下(可以根據需要調整):
this.selectProductAttr = [ { name: "顏色", values: ["紅色", "藍色"] }, { name: "大小", values: ["S", "M"] }, { name: "材質", values: ["棉", "羊毛"] } ];
初始化部分
首先,代碼初始化了一個空數(shù)組 skuStockList,并通過 skuList 引用指向該數(shù)組。
this.value.skuStockList = []; let skuList = this.value.skuStockList;
這段代碼的目的是為后續(xù)生成的 SKU 列表提供一個存儲地方。
處理不同數(shù)量的屬性
接下來,代碼根據 this.selectProductAttr.length 的值判斷當前有多少個屬性被選擇。根據屬性的數(shù)量,代碼將生成不同數(shù)量的組合 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] }]) }); } }
執(zhí)行過程:
- 只有一個屬性 "顏色",其值為 ["紅色", "藍色"]。
- 對這個屬性的每一個值,生成一個 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; // 跳過當前循環(huán),繼續(xù)處理下一個第一個屬性的值 } 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) }); } } }
執(zhí)行過程:
- 有兩個屬性 "顏色" 和 "大小",其中 "顏色" 有 ["紅色", "藍色"],"大小" 有 ["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; // 跳過當前循環(huán),繼續(xù)處理下一個第一個屬性的值 } 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; // 跳過當前循環(huán),繼續(xù)處理下一個第二個屬性的值 } 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) }); } } } }
執(zhí)行過程:
有三個屬性 "顏色"、"大小" 和 "材質",其值分別為:
- "顏色":["紅色", "藍色"]
- "大小":["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\":\"羊毛\"}]"} ]
總結
- 代碼根據選擇的商品屬性數(shù)量動態(tài)生成不同數(shù)量的 SKU 組合。
- 當屬性數(shù)量為 1 時,生成一個包含該屬性所有值的 SKU 列表。
- 當屬性數(shù)量為 2 時,生成包含這兩個屬性所有值的組合 SKU 列表。
- 當屬性數(shù)量為 3 時,生成包含三個屬性的所有組合 SKU 列表。
- 每一個 SKU 都是一個包含屬性名和值的 JSON 字符串,保存在 skuStockList 中。
通過這些步驟,代碼可以靈活地處理多屬性商品的不同組合,最終生成不同的 SKU 列表。
到此這篇關于vue前端sku實現(xiàn)的方法小結的文章就介紹到這了,更多相關vue sku內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
VUE+jszip如何實現(xiàn)下載多個文件導出為一個zip格式
這篇文章主要介紹了VUE+jszip如何實現(xiàn)下載多個文件導出為一個zip格式方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03vue中路由跳轉的多種方式(和$router下路由跳轉的那幾個方法的區(qū)別)
Vue.js是一款流行的前端JavaScript框架,它提供了多種方式來實現(xiàn)路由跳轉,本文給大家分享vue中路由跳轉的幾種方式(和$router下路由跳轉的那幾個方法的區(qū)別),感興趣的朋友一起看看吧2023-11-11vue中實現(xiàn)先請求數(shù)據再渲染dom分享
下面小編就為大家分享一篇vue中實現(xiàn)先請求數(shù)據再渲染dom分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03Vue ElementUI中el-table表格嵌套樣式問題小結
這篇文章主要介紹了Vue ElementUI中el-table表格嵌套樣式問題小結,兩個表格嵌套,當父表格有children數(shù)組時子表格才展示,對Vue ElementUI中el-table表格嵌套樣式問題感興趣的朋友跟隨小編一起看看吧2024-02-02