根据商品规格筛选商品

思路:现将规格数组拿到,再让商品数组的每个规格里的每一项规格比较,如果规格数组和某一个商品的规格全部匹配,则渠道改商品的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后获取效果图
原文地址:https://www.cnblogs.com/fqh123/p/10045889.html