向淘宝京东商品选择的时候,会有规格选择,多种规格联动,如下三个截图淘宝的商品规格选择,在有的规格下没有商品或没货需要置灰,不可选择,多级状态下就需要使用一些特殊计算方法来保证此效果,可以是正则来做(这是最麻烦的,不够优雅,而且比较慢,正则表达式还要很好才行),还可以使用字典查找方式(这个需要事先计算得到各种组合的字典,内存使用上回比较大,前期计算时间比较多,都是后面匹配上很简单,基本无须计算),这里我使用质数的方式。
先来看看质数的解释:质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个因数)的数。简单的说就是除1以外,只能被1和自己整除的数。
质数还有个特点,质数与质数的乘积只能被1或本身以及这些质数整除,如2 X 3 X 5只能被除去1和本身以外的2、3、5整除,这个特性刚好可以用在规格选择上
如上图(原图属性太多,不方便讲,我去掉了一部分,不影响原理),我给每个规格设置上唯一的质数,假如可选商品组合有2 X 5 X 13,2 X 7 X 13, 2 X 7 X 17,3 X 7 X 11,我只是举个例子。
假如选中2所在的按钮,能被2整除的可选项有2 X 5 X 13,2 X 7 X 13, 2 X 7 X 17,所以5、7、13、17是可以被点击的,而11这个按钮没有需要设置成不可点击。
在选中5这个按钮,能被2和5整除的只有2 X 5 X 13,这时需要在吧17这个按钮置不可点击
代码实现就不写了,并不难,这个实现就是需要做循环判断,每次都循环可能耗时比较多,而且每个按钮都需要判断一次,还有一种实现方式是字典查找,可以优化成质数和字典查找组合的方式,在循环的过程中可以把可选组合保存到字典中,判断是可优先从字典里找,有则不用循环,没有再做循环