sku選擇器

業(yè)務(wù)簡介

公司做的是O2O產(chǎn)品,自然是少不了選取商品規(guī)格的功能噠镣煮,購物姐霍,我們是專業(yè)滴~~~

需求分析

商品的屬性有多種,尺寸怎静,性別邮弹,顏色...
其存在的組合方式是確定的黔衡,
那么蚓聘,問題來了...
作為前端的小美女,如何確保用戶只能選擇存在的那些組合呢盟劫?夜牡??
例子:
性別:男 女
顏色:紅色 黑色 白色
尺寸:L M S
存在的組合有: 男-紅-L侣签; 男-白-M 塘装;女-紅-M; 女-黑-S
所有的屬性為平級的關(guān)系影所,即蹦肴,點擊性別,顏色猴娩,尺寸沒有所謂的先后順序...
我們面對的問題是:
當(dāng)用戶點擊 紅色的時候 男,女可選阴幌,L,M可選勺阐,S不可選
當(dāng)用戶選擇了男-紅后 僅L可選
不可選的呈置灰狀態(tài)

解決問題

  • 解析后臺數(shù)據(jù)結(jié)構(gòu)
  • 獲取所有組合的集合
  • 獲取已選的組合
  • 判斷其他屬性是否可選
  • 重新渲染頁面
    下面就按著步驟一步一步來咯~~~
1.解析后臺數(shù)據(jù)結(jié)構(gòu)

后臺數(shù)據(jù)結(jié)構(gòu)如下(itemSkuMaps):

  "26:2;27:4;28:6;":{"price": "122",      //屬性id:具體屬性id;
                     "stock": 13,
                     "skuId": 462618612501,
                     "skuImg": "***.jpg"},

解析:

  let all = Object.keys(itemSkuMaps).map((item)=>{
    let attrItemArr = item.split(';'); attrItemArr.pop();
    return attrItemArr
  })
  var AllGroups = [];
  let AllGroup = all.reduce((temp, allItem) => {
    var tempGroup = this.powerset(allItem);  //獲取到單個組合的所有隱藏可選的集合
    return tempGroup.map((item) => {
      AllGroups.push(item)
    })
  }, 0)

  powerset(arr) {  //摘自網(wǎng)絡(luò)
     var ps = [[]];
     for(var i= 0; i<arr.length; i++) {
        for (var j = 0, len = ps.length; j < len; j++) {
          ps.push(ps[j].concat(arr[i]));
        }
      }
    return ps;
  }  //  eg: 男-紅-L存在時    {男 、紅 矛双、L渊抽、男紅、男L议忽、紅L懒闷、男紅L 全部存在}
2.獲取已選的組合
getAttrs(e) {  //小程序版本的  獲取屬性id:具體屬性id
  let datas = e.currentTarget.dataset;
  let pid = `skuItem[${datas.pid}]`
  if (datas.baned) {
    wx.showToast({
      title: '不可選',
      icon: 'none'
    })
    return;
  }
  this.data.skuItem[datas.pid] == datas.id ?
    this.setData({
      [pid]: ''  
    }) :
    this.setData({
      goodsCount: 1,
      [pid]: datas.id,
      tempSku: datas.pid + ':' + datas.id
    });
  let skuStr = this.data.skuItem.reduce((s = '', item, index) => {
    return s += item === '' ? '' : `${index}:${item};`
  }, '')
  this.setData({
    skuStr: skuStr
  })
}
3.判斷其他屬性是否可選
//計算剩余可以選擇的屬性
getAllAbled(list, test) {
  let abled= list.map((item) => {
    var key = test.toString().split(':')[0];
    if (key == [Object.keys(item)]) {
      return { [Object.keys(item)]: item[Object.keys(item)] }
    } else {
      return {
        [Object.keys(item)]: item[Object.keys(item)].map((abledItem) => {
          var inner = this.bubbelSort([...test, abledItem]);  //排序
          var flg = this.isInList(this.data.AllGroups, inner)
          if (flg) {
            return abledItem
          } else {
            return 0
          }
        })
      }
    }
  })
  return abled;
}
4.重新渲染+其他工具類的函數(shù)
isInList(lists, list) {//多維數(shù)組,數(shù)組
  return lists.some((item) => {
    return item.toString() == (list.toString());
  })
}
var item = this.data.skuStr.split(';');item.pop();
  this.setData({
    checkedLength: item.length
  })
  var flg = itemSkuAttrs
  for (var i = 0; i < item.length; i++) {
    flg = this.getAllAbled(flg, new Array(item[i]))
  }

整個的思路就是:通過已知的組合獲取到所有存在的子組合的集合栈幸,再將用戶選擇的與之比較愤估,對其他的屬性進行依次比較判斷其是否可選

總結(jié):ES6hin強大,減少了好多工作量~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末速址,一起剝皮案震驚了整個濱河市灵疮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壳繁,老刑警劉巖震捣,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異闹炉,居然都是意外死亡蒿赢,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門渣触,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羡棵,“玉大人,你說我怎么就攤上這事嗅钻≡肀” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵养篓,是天一觀的道長秃流。 經(jīng)常有香客問我,道長柳弄,這世上最難降的妖魔是什么舶胀? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮碧注,結(jié)果婚禮上嚣伐,老公的妹妹穿的比我還像新娘。我一直安慰自己萍丐,他們只是感情好轩端,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逝变,像睡著了一般基茵。 火紅的嫁衣襯著肌膚如雪刻撒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天耿导,我揣著相機與錄音声怔,去河邊找鬼。 笑死舱呻,一個胖子當(dāng)著我的面吹牛醋火,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播箱吕,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼芥驳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了茬高?” 一聲冷哼從身側(cè)響起兆旬,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怎栽,沒想到半個月后丽猬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡熏瞄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年脚祟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片强饮。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡由桌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邮丰,到底是詐尸還是另有隱情行您,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布剪廉,位于F島的核電站娃循,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏妈经。R本人自食惡果不足惜淮野,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一捧书、第九天 我趴在偏房一處隱蔽的房頂上張望吹泡。 院中可真熱鬧,春花似錦经瓷、人聲如沸爆哑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揭朝。三九已至队贱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間潭袱,已是汗流浹背柱嫌。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屯换,地道東北人编丘。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像彤悔,于是被迫代替她去往敵國和親嘉抓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評論 25 707
  • 我想我是孤獨的, 就算對著電話那頭的你說上千言萬語杨赤; 我想我是自私的敞斋; 就算你并無過錯我也要強找借口; 我想...
    平底拖鞋閱讀 121評論 0 2
  • 今早坐在大巴上疾牲,不知道為什么腦海里一閃而過出現(xiàn)了盼盼的臉渺尘。 盼盼是我的閨蜜,我的牢騷她都知道说敏。為什么非得說牢騷這個...
    瘋子陌閱讀 394評論 0 4
  • 無論結(jié)果是好是壞(一些有益的鸥跟、有害的),最好的行動是達到更好或更壞的結(jié)果盔沫。 歷史記錄了許多時候?qū)<业囊庖娨恢笔清e誤...
    Fx_閱讀 204評論 0 3
  • 中午看了《山河故人》医咨,挺驚艷的。驚艷架诞?不對拟淮。那用“挺好”?用“挺好”太平庸了谴忧。那我就不知道用什么詞形容了很泊。用詞不能...
    飛魚kiwi閱讀 286評論 0 2