计算对象键对值之间的增加/减少



我有一个对象,填充了这样的对象:

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) + '%'
}

最新更新