使用Javascript计算多个动态值的百分比变化

使用Javascript计算多个动态值的百分比变化,javascript,arrays,math,diff,percentage,Javascript,Arrays,Math,Diff,Percentage,我有一个表格,显示一年中每个月的值。它看起来像: Month | 2015 | ---------------- Jan | 4856 | Feb | 6521 | Mar | .... | Apr | .... | May | .... | Jun | .... | Jul | .... | Aug | .... | Sep | .... | Oct | .... | Nov | .... | Dec

我有一个表格,显示一年中每个月的值。它看起来像:

Month |  2015  |
----------------
Jan   |  4856  |
Feb   |  6521  |
Mar   |  ....  |
Apr   |  ....  |
May   |  ....  |
Jun   |  ....  |
Jul   |  ....  |
Aug   |  ....  |
Sep   |  ....  |
Oct   |  ....  |
Nov   |  ....  |
Dec   |  ....  |
----------------
SUM   |  48956 |
我有一个数组,收集所有和值,如下所示:

sum = [48956]
然后,用户可以选择向表中添加更多年份的值,如:

Month |  2013  |  2014  |  2015  |
----------------------------------
Jan   |  6587  |  8954  |  4856  |
Feb   |  1254  |  1125  |  6521  |
Mar   |  ....  |  ....  |  ....  |
Apr   |  ....  |  ....  |  ....  |
May   |  ....  |  ....  |  ....  |
Jun   |  ....  |  ....  |  ....  |
Jul   |  ....  |  ....  |  ....  |
Aug   |  ....  |  ....  |  ....  |
Sep   |  ....  |  ....  |  ....  |
Oct   |  ....  |  ....  |  ....  |
Nov   |  ....  |  ....  |  ....  |
Dec   |  ....  |  ....  |  ....  |
----------------------------------
SUM   |  35780 |  96448 |  48956 |
----------------------------------
diff  |        | %change| %change|
该阵列现在看起来像:

sum = [35780, 96448, 48956]
现在我希望“diff”行显示这些年来百分比的增加或减少。
2014年与2013年相比,2015年与2014年相比等等

如何在数组中获取ex.96448和35780,并计算2014年的差异值,然后在表中添加每个新年的差异值

96448 - 35780 = 60668 / 96448 = 0,629 * 100 = 62,9% 
当然,第一年(本例中为2013年)没有区别。

使用jquery编写代码 使用Javascript编写代码
var-arr=[489569644835780];
//var-arr=[9644835780];
var-diff=[];

对于(var i=0;i

),要仅计算更改,可以执行以下操作:

let sums = [35780, 96448, 48956];
let changes = [];
for (let i = 1; i < sums.length; i++) {
    changes[i] = sums[i] / sums[i-1] * 100; 
}
let sums=[3578096448956];
让变化=[];
for(设i=1;i

这将返回一个列表,其中包含您每年的增长(%)。

使用
数组的解决方案。reduce
功能:

var sum = [35780, 96448, 48956],
    diff = ['-'];  // first column is empty '-'

sum.reduce(function (a, b) {
    if (a === 0) return b;
    var isNegative = b - a < 0;
    diff.push(parseInt((b - a) / (isNegative? a : b) * 100));
    return b;
}, 0);

console.log(diff);  // ["-", 62, -49]
var sum=[3578096448956],
diff=['-'];//第一列为空'-'
求和减少(函数(a,b){
如果(a==0)返回b;
var为负=b-a<0;
压差(parseInt((b-a)/(isNegative?a:b)*100);
返回b;
}, 0);
console.log(diff);//[“-”,62,-49]

为什么最后一个值
48956
在你的
sum
数组中排在第一位?对不起,只是一个输入错误。我想我写它的时候有点累了。当然,数组是另一种方式。它没有给出所有年份的差异。你想总是有相对于第一年的变化吗?不,我想有相对于前一年的变化上一年。但这就是发生的事情……我添加了sums数组,也许这就清楚了。感谢您提供了一个伟大的解决方案。另外,感谢您提供了使用对象的技巧。很高兴提供帮助。需要添加的小东西:我展示的对象当然只是一个示例,为您的
sums
和一个f使用单独的对象可能更有意义或者你的
diff
或者类似的东西:)当你推到diff列表时,你不应该除以上一个值吗@lexith@tlalco你说得对。非常感谢。修复了它,并将其更改为更现代的方式^^
let sums = [35780, 96448, 48956];
let changes = [];
for (let i = 1; i < sums.length; i++) {
    changes[i] = sums[i] / sums[i-1] * 100; 
}
const values = [10000, 20000, 25000, 5000]; // values per year sorted ascending

const increases = values.map((currVal, index) => {
    if (index === 0) {
        return;
    }

    const prevVal = values[index - 1];
    return ((currVal - prevVal) / prevVal) * 100;
}).filter(Boolean);

console.log(increases); // [100, 25, -80] values in percent
var sum = [35780, 96448, 48956],
    diff = ['-'];  // first column is empty '-'

sum.reduce(function (a, b) {
    if (a === 0) return b;
    var isNegative = b - a < 0;
    diff.push(parseInt((b - a) / (isNegative? a : b) * 100));
    return b;
}, 0);

console.log(diff);  // ["-", 62, -49]