计算JavaScript对象中属性百分比的变化
Calculating change in percent of the properties in JavaScript objects
我想通过它的先前范围计算数据范围的百分比变化。
下面是我正在做的一个例子:
下面是一个对象数组,我需要根据WeekNo
范围的选择来计算displayAd_imp
, videoAd_imp
和tv_impbased
属性的百分比变化。
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
}];
在下面的方法中,我试图通过首先过滤具有start和end 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来计算该时期的百分比变化。例如,在上面的示例中,我们调用CalcWeekRange(objArr,32,33);
。
displayAd_imp
的百分比变化逻辑将是:
当前周数(32,33):1400+1500 = 2900(我们在sumArr
中有这部分)
前几周(30、31):1600+1500 = 3100
%改变:(2900/3100-1)* 100 = -6.45 (注:允许负)
上述情况也适用于其他属性。
希望问题和例子是清楚的,谢谢你的时间!你的意思是像这样除了你上面的对象数组和代码?
var jCurrent = CalcWeekRange(objArr,32,33);
var jPrevious = CalcWeekRange(objArr,30,31);
var jCurrentDisplay = jCurrent[0].displayAd_imp;
var jPreviousDisplay = jPrevious[0].displayAd_imp;
var result = (jCurrentDisplay/jPreviousDisplay-1)*100;
console.log("result ", result);
调整你的jsFiddle: jsFiddle
更新:如果您想获得基于当前实际周的结果,这可以通过以下调整来完成上述代码:
Date.prototype.getWeek = function() {
var firstday = new Date(this.getFullYear(),0,1);
var today = new Date(this.getFullYear(),this.getMonth(),this.getDate());
var dayOfYear = ((today - firstday + 86400000)/86400000);
return Math.ceil(dayOfYear/7)
};
var today = new Date();
var currentWeekNumber = today.getWeek();
var jCurrentDynamic = CalcWeekRange(objArr,currentWeekNumber-1,currentWeekNumber);
var jPreviousDynamic = CalcWeekRange(objArr,currentWeekNumber -3,currentWeekNumber -2);
var jCurrentDisplayDynamic = jCurrentDynamic[0].displayAd_imp;
var jPreviousDisplayDynamic = jPreviousDynamic[0].displayAd_imp;
var resultDynamic = (jCurrentDisplayDynamic/jPreviousDisplayDynamic-1)*100;
console.log("resultDynamic ", resultDynamic);
我已经更新了小提琴,并添加了一个对象的实际当前周数34(只是一个副本33周的测试),所以小提琴将停止工作下个星期:)
更新演示
相关文章:
- 单击页面上的链接后高度发生变化
- React redux初始化功能,无论状态变化如何
- 如果宽度是百分比,如何设置以px为单位的图像高度
- 角度ng变化或ng点击选择can'不起作用
- 每个选择器的Jquery css颜色都在变化,但字体大小却没有变化
- 使用javascript可以设置css动画的当前百分比
- JS幻灯片与CSS背景颜色变化
- 重新加载页面时Javascript变量发生变化
- 当我使用高度百分比时,谷歌地图javascript api不会显示
- 如何获得Bootstrap Datepicker的年和月,因为它在变化
- Javascript差异百分比数学
- 如何用jquery替换字符串中可能变化的字符
- 检测数据的变化
- 如何检测和打印变化变量LESS
- 当文本不断变化时,如何避免在按钮内移动文本
- 根据元素高度和宽度的百分比变化增加或减少字体大小
- 计算JavaScript对象中属性百分比的变化
- JQuery -在变化时用另一个输入的百分比倍数填充两个输入
- 对一个序列的变化百分比求和
- 使用Javascript计算多个动态值的百分比变化