我有一个对象,填充了这样的对象:
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: ...
},
我如何实现这一目标?
答案 0 :(得分:0)
你只需要浏览去年的对象,然后再使用等式
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) + '%'
}
变量结果保存您的最终对象
$t = '1-P,2-T,3-P,4-R,5-C,6-T,';
答案 1 :(得分:0)
您可以获取密钥(年份),将它们转换为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);