vue前端sku實現(xiàn)的方法小結(jié)
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è)的選擇屬性數(shù)據(jù)
假設(shè)選擇的商品屬性如下(可以根據(jù)需要調(diào)整):
this.selectProductAttr = [
{ name: "顏色", values: ["紅色", "藍色"] },
{ name: "大小", values: ["S", "M"] },
{ name: "材質(zhì)", values: ["棉", "羊毛"] }
];
初始化部分
首先,代碼初始化了一個空數(shù)組 skuStockList,并通過 skuList 引用指向該數(shù)組。
this.value.skuStockList = []; let skuList = this.value.skuStockList;
這段代碼的目的是為后續(xù)生成的 SKU 列表提供一個存儲地方。
處理不同數(shù)量的屬性
接下來,代碼根據(jù) this.selectProductAttr.length 的值判斷當前有多少個屬性被選擇。根據(jù)屬性的數(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。
結(jié)果:
[
{"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"]。
- 代碼會生成兩個屬性的所有組合。即,遍歷 "顏色" 的每一個值,并與 "大小" 的每個值進行配對。
結(jié)果:
[
{"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í)行過程:
有三個屬性 "顏色"、"大小" 和 "材質(zhì)",其值分別為:
- "顏色":["紅色", "藍色"]
- "大小":["S", "M"]
- "材質(zhì)":["棉", "羊毛"]
代碼會生成三個屬性的所有組合。即,遍歷 "顏色" 的每一個值,和 "大小"、"材質(zhì)" 的每個值進行配對。
結(jié)果:
[
{"spData": "[{\"key\":\"顏色\",\"value\":\"紅色\"},{\"key\":\"大小\",\"value\":\"S\"},{\"key\":\"材質(zhì)\",\"value\":\"棉\"}]"},
{"spData": "[{\"key\":\"顏色\",\"value\":\"紅色\"},{\"key\":\"大小\",\"value\":\"S\"},{\"key\":\"材質(zhì)\",\"value\":\"羊毛\"}]"},
{"spData": "[{\"key\":\"顏色\",\"value\":\"紅色\"},{\"key\":\"大小\",\"value\":\"M\"},{\"key\":\"材質(zhì)\",\"value\":\"棉\"}]"},
{"spData": "[{\"key\":\"顏色\",\"value\":\"紅色\"},{\"key\":\"大小\",\"value\":\"M\"},{\"key\":\"材質(zhì)\",\"value\":\"羊毛\"}]"},
{"spData": "[{\"key\":\"顏色\",\"value\":\"藍色\"},{\"key\":\"大小\",\"value\":\"S\"},{\"key\":\"材質(zhì)\",\"value\":\"棉\"}]"},
{"spData": "[{\"key\":\"顏色\",\"value\":\"藍色\"},{\"key\":\"大小\",\"value\":\"S\"},{\"key\":\"材質(zhì)\",\"value\":\"羊毛\"}]"},
{"spData": "[{\"key\":\"顏色\",\"value\":\"藍色\"},{\"key\":\"大小\",\"value\":\"M\"},{\"key\":\"材質(zhì)\",\"value\":\"棉\"}]"},
{"spData": "[{\"key\":\"顏色\",\"value\":\"藍色\"},{\"key\":\"大小\",\"value\":\"M\"},{\"key\":\"材質(zhì)\",\"value\":\"羊毛\"}]"}
]
總結(jié)
- 代碼根據(jù)選擇的商品屬性數(shù)量動態(tài)生成不同數(shù)量的 SKU 組合。
- 當屬性數(shù)量為 1 時,生成一個包含該屬性所有值的 SKU 列表。
- 當屬性數(shù)量為 2 時,生成包含這兩個屬性所有值的組合 SKU 列表。
- 當屬性數(shù)量為 3 時,生成包含三個屬性的所有組合 SKU 列表。
- 每一個 SKU 都是一個包含屬性名和值的 JSON 字符串,保存在 skuStockList 中。
通過這些步驟,代碼可以靈活地處理多屬性商品的不同組合,最終生成不同的 SKU 列表。
到此這篇關(guān)于vue前端sku實現(xiàn)的方法小結(jié)的文章就介紹到這了,更多相關(guān)vue sku內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3結(jié)合typescript中使用class封裝axios
這篇文章主要為大家介紹了vue3結(jié)合typescript中使用class封裝axios實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
vue+Element-ui實現(xiàn)分頁效果實例代碼詳解
這篇文章主要介紹了vue+Element-ui實現(xiàn)分頁效果 ,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-12-12

