今天去面试,被问及了一个很好的问题.
他们也还没有解决如何去显示库存的联动问题.
颜色,版本,选择版本可以分别选择互相联动,比如选择了wifi版128G,原来选择的金色可能就变为不可选状态.
这其实是一个多对多的关系.用一般的数据结构很难表达的出来.
有一个比较好的办法就是通过一个编号,把具备某种特征的物品用编号串起来.
比如
金色:A, 银色:B, 深空灰色:C
WIFI版128G:O, WIFI版32G:P, Cellular版128G:Q, Cellular版32G:R
普通版:11,Pencil套装版:22, 壳膜套装版: 33
那么一个金色,WIFI版128G,普通版的ipad的编号就是AO11,
在金色,WIFI版128G,普通版的属性后面都分别有个列表,列表中都有一个AO11的编号.
如果金色的属性列表后面没有AO11的编号的数据,那就说明当前金色,WIFI版128G,普通版的ipad缺货.
为了提高计算效率,客户端收到属性列表的数组后,将其转化为集合.当用户选择颜色中的属性后,将其后的集合与版本和选择版本后的所有属性列表的集合做交集运算.有交集的就说明该商品不缺货.
可以被选择,否则就自动选下一个属性,将当前的属性的按键变成不可选状态.
我查看了一下某东的代码,发现他们也是这个设计思路.
比如他们的列表就是下面这样的.
"colorSize": [{
"title": "颜色",
"buttons": [{
"text": "金色",
"no": "1",
"skuList": ["100001478695", "100001964720", "100002866472", "100002866474", "100002866488", "100002866524", "6749532", "6805044", "6872784", "7019143", "7019899", "7086547"]
}, {
"text": "银色",
"no": "2",
"skuList": ["100001478691", "100001964744", "100002026797", "100002866490", "100002866500", "100002866516", "6749070", "6805110", "6805332", "6806436", "7086491", "7086833"]
}, {
"text": "深空灰色",
"no": "3",
"skuList": ["100001478693", "100001964692", "100002026803", "100002866508", "100002866510", "100002866514", "6805712", "6806366", "6962865", "7019127", "7086457", "7086643"]
}]
}, {
"title": "版本",
"buttons": [{
"text": "WIFI版128G",
"no": "1",
"skuList": ["100002026797", "100002866488", "100002866508", "6805332", "6805712", "7019143", "7086457", "7086491", "7086547"]
}, {
"text": "WIFI版32G",
"no": "2",
"skuList": ["100002866514", "100002866516", "100002866524", "6749070", "6749532", "6872784", "6962865", "7086643", "7086833"]
}, {
"text": "Cellular版128G",
"no": "3",
"skuList": ["100001478693", "100001478695", "100001964744", "100002866474", "100002866490", "100002866510", "6806366", "6806436", "7019899"]
}, {
"text": "Cellular版32G",
"no": "4",
"skuList": ["100001478691", "100001964692", "100001964720", "100002026803", "100002866472", "100002866500", "6805044", "6805110", "7019127"]
}]
}, {
"title": "选择版本",
"buttons": [{
"text": "普通版",
"no": "1",
"skuList": ["6749070", "6749532", "6805044", "6805110", "6805332", "6805712", "6806366", "6806436", "6962865", "7019127", "7019143", "7019899"]
}, {
"text": "Pencil套装版",
"no": "3",
"skuList": ["100001478691", "100001478693", "100001478695", "100001964692", "100001964720", "100001964744", "6872784", "7086457", "7086491", "7086547", "7086643", "7086833"]
}, {
"text": "壳膜套装版",
"no": "4",
"skuList": ["100002026797", "100002026803", "100002866472", "100002866474", "100002866488", "100002866490", "100002866500", "100002866508", "100002866510", "100002866514", "100002866516", "100002866524"]
}]
}],
"colorSizeTips": "#与其他已选项无法组成可售商品,请重选"
}