筛选 SKU 算法

83b68d1d8727ec06344428c7ce3b56bd.png

SKU(Stock Keeping Unit)是指库存量单位,通常用来管理和追踪商品库存。在电商平台上,一个商品可能有多个颜色、尺码、款式等属性,每种属性都可以看作一个SKU,不同的SKU可能具有不同的价格和库存量。

SKU计算是根据商品的属性和SKU信息,计算出所有组合的价格和库存信息的过程。下面以尺码颜色为例进行说明:

假设商品有3种尺码(S、M、L)和4种颜色(红、蓝、绿、黑),每个SKU的价格和库存

如下图所示:

SKU尺码颜色价格库存
SKU1(红S)S105
SKU2(红M)M123
SKU3(红L)L142
SKU4(蓝S)S94
SKU5(蓝M)M116
SKU6(蓝L)L131
SKU7(绿S)S绿80
SKU8(绿M)M绿107
SKU9(绿L)L绿124
SKU10(黑S)S113
SKU11(黑M)M138
SKU12(黑L)L152

假设用户选择尺码为S和颜色为蓝的商品,我们需要计算出所有符合条件的SKU组合的价格和库存信息。具体计算过程如下:

1、筛选出尺码为S的SKU:

SKU尺码颜色价格库存
SKU1(红S)S105
SKU4(蓝S)S94
SKU7(绿S)S绿80
SKU10(黑S)S113

2、从符合条件的SKU中筛选出颜色为蓝的SKU:

SKU尺码颜色价格库存
SKU4(蓝S)S94
SKU5(蓝M)M116
SKU6(蓝L)L131

3、计算价格和总库存:

SKU尺码颜色价格库存
SKU4(蓝S)S94
SKU5(蓝M)M116
SKU6(蓝L)L131
总计

3311

因此,在尺码为S和颜色为蓝的条件下,符合条件的SKU组合有3种,对应的总价格为33,总库存为11。

筛选SKU的过程通常是通过商品属性进行筛选,例如尺码、颜色、材质等属性。先把所有SKU按照属性分类,然后根据用户选择的属性值进行筛选。

以下是用JS实现SKU筛选的示例代码:

// 假设我们有以下4个SKU
const skus = [
  { id: 'SKU1', size: 'S', color: '红色', price: 10, stock: 5 },
  { id: 'SKU2', size: 'M', color: '红色', price: 12, stock: 8 },
  { id: 'SKU3', size: 'S', color: '黄色', price: 8, stock: 3 },
  { id: 'SKU4', size: 'M', color: '黄色', price: 9, stock: 10 },
];


// 按照尺码、颜色分组
const sizeMap = new Map();
const colorMap = new Map();
skus.forEach(({ id, size, color }) => {
  if (!sizeMap.has(size)) {
    sizeMap.set(size, []);
  }
  sizeMap.get(size).push(id);


  if (!colorMap.has(color)) {
    colorMap.set(color, []);
  }
  colorMap.get(color).push(id);
});


// 根据所选的尺码和颜色筛选相关SKU
function filterSkus(selectedSize, selectedColor) {
  let matches = skus.map((sku) => sku.id);


  if (selectedSize) {
    matches = sizeMap.get(selectedSize) || [];
  }


  if (selectedColor) {
    if (matches.length > 0) {
      matches = matches.filter((id) => colorMap.get(selectedColor)?.includes(id));
    } else {
      matches = colorMap.get(selectedColor) || [];
    }
  }


  return matches.map((id) => skus.find((sku) => sku.id === id));
}


// 示例,选择尺码S、颜色红色,输出SKU1
const filteredSkus = filterSkus('S', '红色');
console.log(filteredSkus);

上述代码中,我们通过循环遍历SKU列表,将SKU按照尺码和颜色分别归类到sizeMapcolorMap中。接着在filterSkus函数中,根据用户选择的尺码和颜色,通过筛选和组合这两个映射表得到匹配的SKU ID,最后将SKU ID 转换成SKU 对象返回即可。

可以根据自己的实际情况进行调整和适当简化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值