1. 程式人生 > >根據商品規格篩選商品

根據商品規格篩選商品

思路:現將規格陣列拿到,再讓商品陣列的每個規格里的每一項規格比較,如果規格陣列和某一個商品的規格全部匹配,則渠道改商品的id;

下邊上一些主要程式碼,太累了,還未整理,主要難點在於,怎麼判斷規格陣列和商品規格匹配,我讓每一個商品去和規格陣列比較,如果每一項規格項裡的規格值都和規格陣列匹配,則給一個空數組裡新增一個該商品的下標,

最後判斷數組裡出現次數最多的值,或者出現次數等於總規格數的值,那麼這個值,就是匹配商品的下標,然後拿到該商品的id,最後判斷如果沒有匹配該規格陣列的商品的方法是,將每一個出現在數組裡的值得重複次數,依次加到一個新數組裡,如果新數組裡的值都小於規格總數量,則說明沒有該規格的商品;下面上一些程式碼,以便再次用到可以馬上又思路;

//根據點選的規格獲取對應規格商品的id var self = this; var len=self.productsArr[0].specs.length;//商品的規格總數 var decide=[]; var specNameArr=[];//盛放規格名稱的陣列 if(self.productSpecArr.length==0){   var objSpec={};   objSpec.specName=groupSpec;   objSpec.specValue=spec;   self.productSpecArr.push(objSpec); }else if(self.productSpecArr.length>0){   for(var key in self.productSpecArr){     specNameArr.push(self.productSpecArr[key].specName);//將規格陣列的規格名稱放到一個數組內   }   if(specNameArr.indexOf(groupSpec)>=0){//如果當前點選的商品規格在陣列記憶體在     for(var j=0;j<self.productSpecArr.length;j++){       if(self.productSpecArr[j].specName==groupSpec){         self.productSpecArr[j].specValue=spec;       }     }   }else if(specNameArr.indexOf(groupSpec)<0){//如果陣列內不存在這種規格,著新增到陣列內     var objSpec={};     objSpec.specName=groupSpec;     objSpec.specValue=spec;     self.productSpecArr.push(objSpec);   }   if(self.productSpecArr.length==len){//如果商品規格選完了,開始根據規格匹配商品     for(var z=0;z<self.productsArr.length;z++){       for(var x=0;x<self.productsArr[z].specs.length;x++){         for(var x=0;x<self.productsArr[z].specs.length;x++){           for(var y=0;y<self.productSpecArr.length;y++){             if(self.productsArr[z].specs[x].specName==self.productSpecArr[y].specName&&self.productsArr[z].specs[x].specValue==self.productSpecArr[y].specValue){//判斷規格形同               decide.push(z)             }           }         }       }     }     // console.log(decide);     var count = 1;     var yuansu = new Array(); //存放陣列decide的不重複的元素     var sum = new Array(); //存放陣列decide中每個不同元素的出現的次數     var no=[];//判斷沒有對應規格的商品     for(var i = 0; i < decide.length; i++) {       for(var j = i + 1; j < decide.length; j++) {         if(decide[i] == decide[j]) {           count++; //用來計算與當前這個元素相同的個數           decide.splice(j, 1); //沒找到一個相同的元素,就要把它移除掉,            j--;         }     }     yuansu[i] = decide[i]; //將當前的元素存入到yuansu陣列中     sum[i] = count; //並且將有多少個當前這樣的元素的個數存入sum陣列中     count = 1; //再將count重新賦值,進入下一個元素的判斷     if(sum[i]==len){       self.productId=self.productsArr[yuansu[i]].id;       console.log(self.productId);     }     no.push(sum[i]);   }   if(no.every(function(item){     return(item<len);   })){     console.log('改規格商品不存在')   }   } } self.getEffectImage();//拿到商品id後獲取效果圖