Js-sku商品规格【电商】
直接上代码片段
const options = [{
title: "颜色",
values: ["红色", "蓝色", "绿色"]
},
{
title: "尺寸",
values: ["S", "M", "L"]
},
{
title: "材质",
values: ["棉", "丝绸", "麻"]
}
];
function generateSKUs(options, initialStock) {
const skus = [];
function backtrack(combination, optionIndex) {
if (optionIndex === options.length) {
const sku = {
combination: combination.slice(),
stock: initialStock
};
skus.push(sku);
return;
}
const currentOption = options[optionIndex];
for (let i = 0; i < currentOption.values.length; i++) {
combination[optionIndex] = currentOption.values[i];
backtrack(combination, optionIndex + 1);
}
}
backtrack([], 0);
return skus;
}
const skus = generateSKUs(options, 10); //初始库存
function getStockByCombination(skus, combination) { //获取库存
for (const sku of skus) {
if (JSON.stringify(sku.combination) === JSON.stringify(combination)) {
return sku.stock;
}
}
return 0;
}
function decreaseStock(skus, combination, quantity) { // 减少库存
for (const sku of skus) {
if (JSON.stringify(sku.combination) === JSON.stringify(combination)) {
sku.stock -= quantity;
return sku.stock >= 0;
}
}
return false;
}
console.log('原始数据', options)
console.log('sku化数据:', skus);
const stock1 = getStockByCombination(skus, ["红色", "M", "棉"]);
console.log(stock1); // 输出初始库存 10
// 减少红色、M 尺寸、棉材质的库存数量 3
const success1 = decreaseStock(skus, ["红色", "M", "棉"], 3);
console.log(success1); // 输出 true 表示库存足够且减少库存成功
const stock2 = getStockByCombination(skus, ["红色", "M", "棉"]);
console.log(stock2); // 输出剩余库存 7
// 尝试减少蓝色、L 尺寸、麻材质的库存数量 5(库存不足)
const success2 = decreaseStock(skus, ["蓝色", "L", "麻"], 5);
console.log(success2); // 输出 false 表示库存不足
const stock3 = getStockByCombination(skus, ["蓝色", "L", "麻"]);
console.log(stock3); // 输出剩余库存 0
有问题联系QQ1291481728或在下方评论,会在第一时刻处理。