将离散的后台数据聚合
当后台传入离散的数据时,如何使这些分散的数据按需求聚合在一起循环输出,可以采用以下办法:
需求:将传入的离散数据按照时间聚合后,按照早、午、晚、加餐再度聚合后输出
方法:将数据循环遍历,按日期分组存放,在数组内继续分组存放餐的种类,最后以多层数组嵌套形式存放
示例代码:
var me = this;
var date = utils.formatDate(new Date(), "y-m-d");
var earlyDate = utils.getDateMiusDay(30);
var recordList = [];
solutionApi.getFoodRecords({
start_date: earlyDate,
end_date: date
}, {
showLoading: true
})
.then(res => {
if (res.data.length > 0) {
var p1 = res.data[0];
//取第一个数组值
var l = [[],[],[],[]];
//建一个二维数组,用于存放修改后的数据
res.data.map(per => {
//使用map函数遍历返回数组
var d1 = utils.formatDate(new Date(p1.recordTime.replace(/-/g, '/')), 'y.m.d');
var d2 = utils.formatDate(new Date(per.recordTime.replace(/-/g, '/')), 'y.m.d');
per['formatDate'] = d2;
per['formatTime'] = utils.formatDate(new Date(per.recordTime.replace(/-/g, '/')), 'h:m');
if (d1 == d2) {
//比较选取的对象时间值和下一个对象时间值比较,如果相同,则将这
//个对象加入到此对象的数组中,如果不同,则重新创建一个数组,将不
//同的这个对象放入新数组,继续向后比较,放入数组的过程中按餐的
//种类将其再分类放入不同数组
switch (per.mealType) {
case 0:
l[0].push(per)
break;
case 1:
l[1].push(per)
break;
case 2:
l[2].push(per)
break;
case 3:
l[3].push(per)
break;
default:
break;
}
} else {
recordList.push(l);
l = [[],[],[],[]];
switch (per.mealType) {
case 0:
l[0].push(per)
break;
case 1:
l[1].push(per)
break;
case 2:
l[2].push(per)
break;
case 3:
l[3].push(per)
break;
default:
break;
}
}
p1 = per;
})
recordList.push(l);
me.recordList = recordList;
me.$apply();
//将分类好的数组绑定,即可进行循环渲染
console.log('recordList====>', recordList);
}
})
}