將離散的後臺數據聚合
當後臺傳入離散的數據時,如何使這些分散的數據按需求聚合在一起循環輸出,可以採用以下辦法:
需求:將傳入的離散數據按照時間聚合後,按照早、午、晚、加餐再度聚合後輸出
方法:將數據循環遍歷,按日期分組存放,在數組內繼續分組存放餐的種類,最後以多層數組嵌套形式存放
示例代碼:
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);
}
})
}