什么事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
准备指针
3 {'0': { parent: null, count: 0 },'1': { parent: '0', count: 0 },'2': { parent: '1', count: 0 },'3': { parent: '2', count: 0 }}
移动指针
0 0 0 00 0 0 10 0 1 0
算法2实现
/*** 笛卡尔积组装* @param {Array} list* @returns []*/function descartes(list) {// parent 上一级索引;count 指针计数let point = {}; // 准备移动指针let ans = []; // 准备返回数据let pIndex = null; // 准备父级指针let tempCount = 0; // 每层指针坐标let temp = []; // 组装当个 sku 结果// 一:根据参数列生成指针对象for (let index in list) {if (typeof list[index] === 'object') {point[index] = { parent: pIndex, count: 0 };pIndex = index;}}// 单维度数据结构直接返回if (pIndex === null) {return list;}// 动态生成笛卡尔积while (true) {// 二:生成结果let index;for (index in list) {tempCount = point[index].count;temp.push(list[index][tempCount]);}// 压入结果数组ans.push(temp);temp = [];// 三:检查指针最大值问题,移动指针while (true) {if (point[index].count >= list[index].length - 1) {point[index].count = 0;pIndex = point[index].parent;if (pIndex === null) {return ans;}// 赋值 parent 进行再次检查index = pIndex;} else {point[index].count++;break;}}}}
测试
console.log(descartes([['男裤', '女裤', '通码'], ['黑', '白']]));[[ '男裤', '黑' ],[ '男裤', '白' ],[ '女裤', '黑' ],[ '女裤', '白' ],[ '通码', '黑' ],[ '通码', '白' ]]
