[英]Aggregate object properties in JavaScript
我想在一個對象數組中聚合屬性並產生另一個具有總計的對象。
這是我正在處理的示例:
下面是對象的數組,我們需要總結 displayAd_imp
, videoAd_imp
, tv_imp
基於WeekNo
范圍。
var objArr = [{
"Title": "July 13 - July 19 2014",
"displayAd_imp": "15",
"videoAd_imp": "75",
"tv_imp": "120",
"Date": "2014-07-17T00:00:00.000Z",
"WeekNo": 29
}, {
"Title": "July 20 - July 26 2014",
"displayAd_imp": "25",
"videoAd_imp": "65",
"tv_imp": "130",
"Date": "2014-07-24T00:00:00.000Z",
"WeekNo": 30
}, {
"Title": "July 27 - Aug 2 2014",
"displayAd_imp": "35",
"videoAd_imp": "55",
"tv_imp": "140",
"Date": "2014-07-31T00:00:00.000Z",
"WeekNo": 31
}, {
"Title": "Aug 3 - Aug 9 2014",
"displayAd_imp": "55",
"videoAd_imp": "25",
"tv_imp": "20",
"Date": "2014-08-07T00:00:00.000Z",
"WeekNo": 32
}, {
"Title": "Aug 10 - Aug 17 2014",
"displayAd_imp": "10",
"videoAd_imp": "70",
"tv_imp": "120",
"Date": "2014-08-14T00:00:00.000Z",
"WeekNo": 33
}]
下面的函數獲取范圍。 我們將參數,周開始和周結束作為參數進行傳遞,並按所需范圍過濾數據。 我有一個JSfiddle示例顯示輸出。
function CalcWeekRange(data,begin,end){
console.log(data,begin, end);
newArr = data.filter(function(item){
return (item.WeekNo >= begin && item.WeekNo <= end);
});
console.log(newArr);
}
之后,我需要將結果匯總到一個看起來像這樣的對象中:
{
"displayAd_imp": "140",
"videoAd_imp": "290",
"tv_imp": "530",
}
最后一部分是我被卡住的地方:(
希望我把問題弄清楚,在此先感謝!
您可以將reduce
與初始累加器一起使用:
function weekRange(begin, end, data) {
return data.filter(function(x) {
return x.WeekNo >= begin && x.WeekNo <= end;
}).reduce(function(acc, x) {
Object.keys(acc).forEach(function(k) {
acc[k] += Number(x[k]);
});
return acc;
},{
displayAd_imp: 0,
videoAd_imp: 0,
tv_imp: 0
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.