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

时间:2016-07-18 10:21:01

标签: javascript arrays object math

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

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: ...
  },

我如何实现这一目标?

2 个答案:

答案 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);