什么事SKU ❓

spu 和 sku 都是属性值的集合

SPU(关键属性), standard product unit, 标准化产品单位,区分品种
SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。例如,iphone4就是一个SPU,N97也是一个SPU,这个与商家无关,与颜色、款式、套餐也无关。

SKU(销售属性), stock-keeping unit, 库存量单位, 区分单品
SKU即库存进出计量的单位, 可以是以件、盒、托盘等为单位。在服装、鞋类商品中使用最多最普遍。 例如纺织品中一个SKU通常表示:规格、颜色、款式。

商品特指与商品商家有关的产品, 每个商品有一个商家编码,可对应多个SKU。
例如,每个商品下面有多个颜色,款式,可以有多个SKU。淘宝叫item,京东叫product。

笛卡尔积

算法1实现: dfs
准备指针

  1. 3 {
  2. '0': { parent: null, count: 0 },
  3. '1': { parent: '0', count: 0 },
  4. '2': { parent: '1', count: 0 },
  5. '3': { parent: '2', count: 0 }
  6. }

移动指针

  1. 0 0 0 0
  2. 0 0 0 1
  3. 0 0 1 0

算法2实现

  1. /**
  2. * 笛卡尔积组装
  3. * @param {Array} list
  4. * @returns []
  5. */
  6. function descartes(list) {
  7. // parent 上一级索引;count 指针计数
  8. let point = {}; // 准备移动指针
  9. let ans = []; // 准备返回数据
  10. let pIndex = null; // 准备父级指针
  11. let tempCount = 0; // 每层指针坐标
  12. let temp = []; // 组装当个 sku 结果
  13. // 一:根据参数列生成指针对象
  14. for (let index in list) {
  15. if (typeof list[index] === 'object') {
  16. point[index] = { parent: pIndex, count: 0 };
  17. pIndex = index;
  18. }
  19. }
  20. // 单维度数据结构直接返回
  21. if (pIndex === null) {
  22. return list;
  23. }
  24. // 动态生成笛卡尔积
  25. while (true) {
  26. // 二:生成结果
  27. let index;
  28. for (index in list) {
  29. tempCount = point[index].count;
  30. temp.push(list[index][tempCount]);
  31. }
  32. // 压入结果数组
  33. ans.push(temp);
  34. temp = [];
  35. // 三:检查指针最大值问题,移动指针
  36. while (true) {
  37. if (point[index].count >= list[index].length - 1) {
  38. point[index].count = 0;
  39. pIndex = point[index].parent;
  40. if (pIndex === null) {
  41. return ans;
  42. }
  43. // 赋值 parent 进行再次检查
  44. index = pIndex;
  45. } else {
  46. point[index].count++;
  47. break;
  48. }
  49. }
  50. }
  51. }

测试

  1. console.log(descartes([['男裤', '女裤', '通码'], ['黑', '白']]));
  2. [
  3. [ '男裤', '黑' ],
  4. [ '男裤', '白' ],
  5. [ '女裤', '黑' ],
  6. [ '女裤', '白' ],
  7. [ '通码', '黑' ],
  8. [ '通码', '白' ]
  9. ]

参考:

知乎-产品SKU
公众号-SKU算法实现