美文网首页
ios SKU 组合算法

ios SKU 组合算法

作者: ios_暗夜行者 | 来源:发表于2021-04-30 17:36 被阅读0次

    通俗来讲,一个SKU 就是商品在规格上的一种组合,比如说,一件衣服 有红色 M号的 也有蓝色 L号的 ,不同的组合就是不同的SKU

    近段时间,刚好遇到要在商品详情页购买商品的时候,实现选择不同规格组合的sku,预判无库存sku选项置灰,减少客户不必要sku的选择。

    网上搜寻了一大批有关sku选择算法的文章,然后被各路大神的一顿操作秀得一脸懵逼,简单来说就是没看懂。。。

    当然基于以上参考得到的灵感,终于总结出来了一种简单易用通俗易懂的sku选择算法,思路简单,唯一的bug是sku数据有n多层的时候,计算量大耗内存。当然现在手机的运算能力都是杠杠的,正常来说商品的sku也不会有几十上百层那么夸张。

    接下来我先捋一下思路吧!

    Tips: sku 有三种状态,可选(正常),不可选(置灰),已选中(高亮),

    一,sku算法初版:计算所有sku的组合 与 有库存sku的组合的交集,交集里面的sku为可选项,反之其他sku为不可选。

     1.计算所有sku的组合-->集合A

    A = ["34,61,66"  , "34,61,67"  , ......]

    2.计算有库存的sku的组合 -->集合B

    一般是从后台服务器返回的 eg:

    3. 计算集合A与集合B的交集,交集里面的所有元素就是初始时所有可选sku ID ,反之其他sku ID就是置灰(无库存不可选状态)

    4.以上三步就是简易的sku算法核心思路,弹出规格框时,计算集合A和集合B的交集,得到初步赛选结果,告诉客户,哪些sku无库存不可选置灰显示,可选的为正常状态显示,减少客户做不必要的选择操作。

    5.当然,细心的你很快就会发现这样的sku算法会导致无法判断出,已选sku的兄弟节点是否可选的bug。

    二,优化兄弟节点的可选状态判断bug

    1.如上图 已选Platform 属性的 34,长度属性的 62 , 我们要判断的已选sku兄弟节点属性分别是Platform 属性的 35,长度属性的 61。 

    2.即:

    要判断 长度属性的 61是否为可选,就要判断,34,61这样的组合是否属于有库存组合里面子集,是:可选,不是: 不可选。

    同理:

    要判断 Platform 属性的 35是否为可选,就要判断,35,62这样的组合是否属于有库存组合里面子集,是:可选,不是: 不可选。

    3.细心的你肯定发现了规律,34,61 或者 35,62 这样的组合都有一个共同点

    即:包含n个已选skuID,n = 已选sku个数-1 .

    三,计算兄弟节点是否可选

    1,计算已选sku ID 同类属性的组合 ==集合C  即:计算Platform 属性和长度属性的组合

    集合C = ["34,61","34,62","35,61","35,61","35,62"]

    2.计算已选skuID的子集 ==集合D 即:计算 [34,62]的子集 

    集合D = ["34","62","34,62"]

    3.从集合D里面筛选出,含有n个已选skuID的子集(n = 已选sku个数-1 )==集合E

    集合E = ["34","62"]

    4.最后计算可选兄弟节点组合,集合C里面的组合只要是含有集合E里面的元素都是可选兄弟节点组合

    可选兄弟节点组合F = 【集合C里面的组合只要是含有集合E里面的元素】

    5. 

    兄弟节点可选skuID =  【(集合A与集合B的交集的skuID集合)再与 集合F 的并集 】

    四,整理

    1.筛选有库存的sku组合为可选sku 其余为不可选sku

    2.计算兄弟节点可选sku

    3.可选sku正常显示,不可选sku置灰,已选sku高亮

    附Demo:sku算法demo

    五,拓展一下

    相关文章

      网友评论

          本文标题:ios SKU 组合算法

          本文链接:https://www.haomeiwen.com/subject/dmnvrltx.html