我想计算的数据范围的百分比变化通过它的前范围。
这里是我工作的一个例子:
下面是我需要计算变化百分比对象的数组displayAd_imp
, videoAd_imp
和tv_impbased
基于选择的属性WeekNo
范围。
var objArr = [{
"Title": "July 13 - July 19 2014",
"displayAd_imp": "3,500",
"videoAd_imp": "1.5",
"tv_imp": "0.52",
"Date": "2014-07-17T00:00:00.000Z",
"WeekNo": 29
}, {
"Title": "July 20 - July 26 2014",
"displayAd_imp": "1,600",
"videoAd_imp": "2.55",
"tv_imp": "0.052",
"Date": "2014-07-24T00:00:00.000Z",
"WeekNo": 30
}, {
"Title": "July 27 - Aug 2 2014",
"displayAd_imp": "1,500",
"videoAd_imp": "2.1",
"tv_imp": "0.122",
"Date": "2014-07-31T00:00:00.000Z",
"WeekNo": 31
}, {
"Title": "Aug 3 - Aug 9 2014",
"displayAd_imp": "1,500",
"videoAd_imp": "1.99",
"tv_imp": "0.254",
"Date": "2014-08-07T00:00:00.000Z",
"WeekNo": 32
}, {
"Title": "Aug 10 - Aug 17 2014",
"displayAd_imp": "1,400",
"videoAd_imp": "2.0",
"tv_imp": ".235",
"Date": "2014-08-14T00:00:00.000Z",
"WeekNo": 33
}];
在下面的方法我想先过滤与起点和终点的数据来实现这一任务WeekNo
,然后计算该数据的总和。 这里有一个的jsfiddle工作示例。
function CalcWeekRange(data,begin,end){
//console.log(data,begin, end);
var newArr = data.filter(function(item){
return (item.WeekNo >= begin && item.WeekNo <= end);
});
var sumArr = [newArr.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,
})];
console.log(sumArr);
}
我在与通过获取前一范围的总和,然后计算该期间的百分比变化的困难部分当前/先前- 1。因此,例如,在上述的jsfiddle我们称为CalcWeekRange(objArr,32,33);
。
对于百分比变化逻辑displayAd_imp
将是:
当前周(32,33):1400 + 1500 = 2900(我们有这部分在sumArr
)
前周(30,31):1600 + 1500 = 3100
%变化:(2900 / 3100-1)* 100 = -6.45(注:负是允许的)
以上会发生的性质其余为好。
希望这些问题的例子是清楚的,感谢您的时间!