用户可以从最多三个维度的产品数据中选择自己想要的产品。例如,对于一条裤子,我可能知道:
colors = ["red", "blue", "soylent green"]
waists = ["28W", "30W", "omg random description", "32W"] // The values are not always numeric
lengths = ["26L", "27L", "28L", "29L"]
在 DOM 中表示为:
<ul class="colors">
<li><button name="red" value="red"/></li>
<li><button name="blue" value="blue/></li>
…
</ul>
<ul class="waists">
<li><button name="28W" value="28W"/></li>
<li><button name="30W" value="30W"/></li>
…
</ul>
<!-- you get the picture -->
我们也知道,您无法获得所有颜色、腰围和长度的组合。选择部分配置时,我们标记HTML以指示可提供哪些配置可用。为我提供可用组合的数据必须以 JSON 格式交付,并且必须交付产品配置的sku(字符串),但它可以采用任何有意义的形式。应该采取什么形式?
我已经尝试了一个 3 维数组,其中定义的值是 skus,null
或者未定义的值是不可用的配置:
[ // Arrays of colors
[ // Arrays of waists
[ // Array of lengths
"sku-1", "sku-2", "sku-3", null, "sku-4"
], [
"sku-abc", null, "sku-def"
]
], [
[ … ], …
] …
]
这是最紧凑的,但会导致代码缓慢、不可读。当客户将鼠标悬停在腰围尺寸按钮上时,我必须在腰围数组中找到该值的索引并消除腰围的所有其他尺寸,然后获取null
值的索引并将它们标记为不可用。这里有很多for
循环。
我尝试的另一种方法是使用嵌套对象。不可用的组合只是未定义的:
{
"red": {
"28W": {
"28L": "sku-123",
"30L": "sku-456"
…
}}}
但是,如果用户将鼠标悬停在 上,例如"28L"
,我必须遍历所有外部对象以找到那些不具有28L
.
如果我只需要知道哪些配置不可用,我可以列出这些配置,但由于我还需要sku
,所以它变得复杂了。什么数据结构在大小和速度(以及可读代码,如果可能的话)之间做出了最好的权衡,记住它将在客户端运行?