我有一个对象,填充了这样的对象:
tblValArr = {
2015: {
jan: 32.75,
feb: 58.65,
mar: 13.28,
apr: 35.78,
may: 98.45,
jun: 45.69,
jul: 32.68,
aug: 75.45,
sep: 39.87,
oct: 95.48,
nov: 26.78,
dec: 12.17
},
2016: {
jan: 48.12,
feb: 13.56,
mar: 57.54,
apr: 14.01,
may: 45.84,
jun: 84.12,
jul: 78.68,
aug: 18.10
...
...
...
...
},
};
现在我想计算2016-2015年间每个键值对(月)之间的百分比增长/下降。
注意:数组的使用期限可以超过2年。但我只想计算最近两年添加到数组中的时间。
因此,我寻找的结果将是一个看起来像的新对象
newArrOfDiffs = {
jan: 46.93%,
feb: -76.87%,
mar: ...,
apr: ...,
may: ...,
jun: ...,
jul: ...,
aug: ...,
sep: ...,
oct: ...,
nov: ...,
dec: ...
},
我该如何做到这一点?
您可以获取密钥(年份),将它们转换为Number,并按Number降序进行排序。然后只使用前两项进行计算。
var tblValArr = { 2015: { jan: 32.75, feb: 58.65, mar: 13.28, apr: 35.78, may: 98.45, jun: 45.69, jul: 32.68, aug: 75.45, sep: 39.87, oct: 95.48, nov: 26.78, dec: 12.17 }, 2016: { jan: 48.12, feb: 13.56, mar: 57.54, apr: 14.01, may: 45.84, jun: 84.12, jul: 78.68, aug: 18.10 } },
newArrOfDiffs = {},
keys = Object.keys(tblValArr).map(Number).sort(function (a, b) { return b - a; });
Object.keys(tblValArr[keys[0]]).forEach(function (k) {
newArrOfDiffs[k] = ((tblValArr[keys[0]][k] / tblValArr[keys[1]][k] - 1) * 100).toFixed(2) + '%';
});
console.log(newArrOfDiffs);
您只需要遍历去年的对象,然后使用以下公式(difference % previousYear) * 100
你可以得到你的百分比。
toFixed
函数将结果格式设置为小数点后2位。此解决方案为您提供包含%字符的字符串。如果您只想要数字,请删除+ '%'
可变结果保存您的最终对象
let result = {}
let years = Object.keys(myObj);
let yearOne = years[years.length - 2]
let yearTwo = years[years.length - 1]
for(let month in myObj[yearTwo]){
let monthOne = myObj[yearOne][month]
let monthTwo = myObj[yearTwo][month]
let difference = monthTwo - monthOne
result[month] = ((difference / monthOne) * 100 ).toFixed(2) + '%'
}