//注意,使用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
})