Js-sku商品规格【电商】

发布时间 2023-08-31 15:16:06作者: 小泽沐优声

直接上代码片段

			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