开发商城项目遇到的现实问题
在网购衣服时,提前知道某些属性组合已经不可买(置灰),例有如下属性:
颜色 | 红色 | 蓝色 | 白色 |
尺寸 | 大 | 小 | 中 |
型号 | 型号A | 型号B | 型号C |
操作:
- 购物车模块弹起来时,将不在库存的属性置灰,例如将
蓝色
置灰 - 选择了一个颜色属性如
红色
,但红色-大
没有货,则需要将尺寸大
置灰 - 依次...
- 对存在的 sku 组合求子集,子集作为对象的 key,value为包含这个当前属性的 sku 组合
如: 当库存中包含了一条数据, sku 组合为蓝色-中-型号A
:
{
porperty: '蓝色-中-型号A', // sku组合
count: 2, // 库存数量
price: 20 // 单件价格
}
将会生成这样的数据结构
// Data struct
const skuMcl = {
'蓝色': [{porperty: '蓝色-中-型号A',count: 2,price: 20}],
'型号A': [{...}]
'中': [{...}],
'蓝色-中': [{...}],
'蓝色-型号A': [{...}],
'中-型号A': [{...}],
'蓝色-中-型号A': [{...}],
}
- 初始的时候
颜色 | 红色 | 蓝色 | 白色 |
尺寸 | 大 | 小 | 中 |
型号 | 型号A | 型号B | 型号C |
将,颜色
,尺寸
,型号
。各个属性代入到 skuMcl
对象中,若存在则可选,若不存在则置灰。
-
当选择了一个属性的时候(例:选择了
颜色
红色
)红色
和尺寸
或型号
,两两组合起来,查看是否在skuMcl
对象中,在可选,不在置灰。
-
在选了两个属性的时候(例:选择
颜色
红色
的基础上,选尺寸
大
)因为在选
红色
的时候已经置灰了一部分型号
的属性- 将
红色-大
和 未置灰的型号
配对,查看是否在skuMcl
对象中,在可选,不在置灰。 - 将
尺寸
大
和除红色
以外的颜色
配对,查看是否在skuMcl
对象中,在可选,不在置灰。
- 将
-
选三个及以上属性
- 看前面那些属性的值因为选了当前的不可选:将原有选择项和当前比对属性未选择未置灰的构成新的组合 代入到
skuMcl
对象中 - 看后面属性值是否置灰:则原有的属性,和后面每个属性中的值做配对看是否在
skuMcl
对象中
- 看前面那些属性的值因为选了当前的不可选:将原有选择项和当前比对属性未选择未置灰的构成新的组合 代入到