自己写的数组 方法的组合使用

//注意,使用map返回的新数组的长度,和原数组的长度是一致的,,  可以结合filter先筛选出来符合条件的,然后在使用map来返回需要的数据,        
 
//用map 循环数组,然后,找到每一向的,数组,再用map循环,拿到二次循环的数组元素,然后以对象的形式取出里边需要的东西,并且返回,因为map返回的
  是数组,所以在最后用了flat()来展开数组,让数组元素全都是对象,最后使用,reduce去重复
        var obj = {};//用来去重
        let activeListArray1=cart_goods_list.map((item,index,arr)=>{
          return item.promotion.map((item1)=>{
                return {"promot_id":item1.promot_id,"promot_name":item1.promot_name,"type":"promotion"}
          })
        }).flat().reduce(function(item,next){
          obj[next.promot_id] ? "" : obj[next.promot_id] = true && item.push(next);
          return item
        },[]);
        console.log(activeListArray1)
        //获取购物车商品每个商品的单品促销活动名称 并且去重
  //先使用filter选出原数组中符合条件的元素,返回符合条件的数组,然后使用map循环符合条件的数组,符合条件数组的元素里又有数组,所以内部又使用
  map来循环里边的数组,然后取出里边要的信息,返回
        var obj2 = {};
        let activeArray2 = cart_goods_list.filter(item=>item.activity.length>0).map((item,index,arr)=>{
          return item.activity.map((item2,index2,arr2)=>{
            return {"promot_id":item2.activity_id,"promot_name":item2.activity_name,"type":"activity"}
          })
        }).flat().reduce(function(item,next){
          obj[next.promot_id] ? "" : obj[next.promot_id] = true && item.push(next);
          return item
        },[]);
        console.log(activeArray2);
        // 合并两个活动的名称
        activeListArray1 = [...activeListArray1,...activeArray2,...[{"promot_id":0,"promot_name":"暂无活动"}]];
        console.log(activeListArray1);
        // 遍历商品,分类放
  这里使用forEach来循环,所有活动的数组,在循环里,使用filter来过滤,商品列表里,和,活动ID一致的商品,然后使用,forEach
  的参数,把filter返回的数组,添加到自己的每个对象的数组中
        activeListArray1.forEach(function(item,index,arr){
          // arr[index].productList = cart_goods_list.filter(item1=>item1.promotion.length>0?item1.promotion[0].promot_id==arr[index].promot_id:null);
          arr[index].productList = cart_goods_list.filter(item1=>{
            if(item1.promotion.length>0){return item1.promotion[0].promot_id==arr[index].promot_id}else if(item1.promotion.length==0&&item1.activity.length>0)
            {return item1.activity[0].activity_id==arr[index].promot_id}else{
              return item1.promotion.length==arr[index].promot_id&&item1.activity.length==arr[index].promot_id}
          });         
        });
        console.log(activeListArray1);
        that.setData({
        activeListArray1
        }) 
posted @ 2020-04-28 13:34  昵称太难取了  阅读(195)  评论(0编辑  收藏  举报