实现商品的sku,可以考虑以下思路:
- 定义商品的属性,例如颜色、尺码等;
- 定义商品属性的取值范围,例如颜色可以取值为红色、蓝色、绿色等,尺码可以取值为 S、M、L、XL 等;
- 根据商品属性和取值范围,生成所有的组合情况,这些组合就是商品的 sku;
- 用对象的方式保存每个 sku 和对应的货号、价格、库存等信息;
- 根据用户选择的属性值,判断该属性值是否可选,可选则组合出选择的 sku;
- 根据选择的 sku,显示对应的货号、价格、库存等信息。
下面是一个简单的实现示例:
// 定义商品属性和取值范围 const goodsProperties = { color: ['红色', '蓝色', '绿色'], size: ['S', 'M', 'L', 'XL'] }; // 生成所有 sku const generateSku = () => { const skuList = {}; const propertyKeys = Object.keys(goodsProperties); const propertyValues = Object.values(goodsProperties); const combination = propertyValues.reduce((com, arr) => { return com.length ? com.map(c => arr.map(m => [].concat(c, m))) : arr.map(a => [].concat(a)); }, []); combination.forEach(com => { const sku = com.join('-'); skuList[sku] = { id: sku, price: Math.floor(Math.random() * 100), inventory: Math.floor(Math.random() * 100) } }); return skuList; }; const skuList = generateSku(); // 根据选择的属性值,组合出选择的 sku const chooseSku = (selectedProperties) => { const selectedKeys = Object.keys(selectedProperties); const availableCombination = Object.keys(skuList).filter(sku => { const properties = sku.split('-'); return selectedKeys.every(key => properties.indexOf(selectedProperties[key]) !== -1); }); return availableCombination.length ? availableCombination[0] : null; }; // 测试 console.log(skuList); console.log(chooseSku({ color: '蓝色', size: 'L' }));
在上面的示例代码中,首先定义了商品的属性和取值范围,然后调用 generateSku
函数生成所有的 sku,并用对象 skuList
存储每个 sku 对应的货号、价格、库存等信息。接着定义 chooseSku
函数,根据用户选择的属性值,筛选出可选的 sku。最后通过测试函数检查代码的正确性。