生活随笔
收集整理的這篇文章主要介紹了
仿淘宝sku算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在做的項目商城有這個需求,一開始用普通的組合遍歷法總覺得哪里不對,于是善用搜索找到了我覺得挺清晰的算法。
假設只有 5.0寸-紅-64G可選,那么當我選擇的選項是5.0寸-紅時,應當只有64G可以點擊,其他按鈕均不可點擊,怎么實現呢?
具體思路是:
1:先根據有庫存的skulist算出所有有可能的組合U
2:再根據選擇的選項去匹配是否在組合U里
3:根據匹配的值,來判斷按鈕是否可以點擊,不可點擊則置灰
作者講的很明白,我就不一一贅述,參考地址放在最下面了
下面直接上前端代碼
watch: {initSpecList(newVal, oldVal) {var self = thisthis.specList = newValif (this.skuList.length > 0) {this.selected = JSON.parse(JSON.stringify(this.skuList[0].specAttr)) //初始化選擇值這里我選的是skulist里的第一條this.operations = [[]]//計算冪集this.skuList.forEach((item, key) => {let arr = []let ps = [[]]item.specAttr.forEach((child, idx) => {arr[idx] = child.specAttrId})for (let i = 0; i < arr.length; i++) {for (var j = 0, len = ps.length; j < len; j++) {ps.push(ps[j].concat(arr[i]))self.operations.push(ps[j].concat(arr[i]))}}})this.computeHandler()}}},//計算最終選擇的數組computeHandler() {var self = thisself.specList.forEach((spec) => {spec.specAttrList.forEach((attr) => {let canChoose = [] // 當前按鈕所匹配的元素數組self.selected.forEach((selectItem) => {if (spec.specId != selectItem.specId && selectItem.specAttrId) {canChoose.push(selectItem.specAttrId) //非同級元素可組合}})canChoose.push(attr.specAttrId)//已組合好元素,去匹配冪集attr.disabled = truefor (let item of self.operations) {canChoose.sort((a, b) => {return a - b})item.sort((a, b) => {return a - b})if (canChoose.toString() == Array.from(item).toString()) {attr.disabled = falsebreak; //匹配到按鈕可點}}})})},
參考地址:
https://www.jianshu.com/p/4a563212f431
總結
以上是生活随笔為你收集整理的仿淘宝sku算法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。