使用 Javascript 计算多个动态值的百分比变化
Calculate percent change over multiple dynamic values with Javascript
我有一个 table 显示一年中每个月的值。它看起来像:
Month | 2015 |
----------------
Jan | 4856 |
Feb | 6521 |
Mar | .... |
Apr | .... |
May | .... |
Jun | .... |
Jul | .... |
Aug | .... |
Sep | .... |
Oct | .... |
Nov | .... |
Dec | .... |
----------------
SUM | 48956 |
我有一个像这样收集所有 SUM 值的数组:
sum = [48956]
然后用户可以选择向 table 添加更多年份的值,例如:
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年相比等等..
我怎样才能抓住前任。数组中的 96448 和 35780 计算 2014 年的 diff 值,然后将相同的每个新的年份添加到 table?
96448 - 35780 = 60668 / 96448 = 0,629 * 100 = 62,9%
当然,第一年(本例中为 2013 年)没有差异。
代码使用 jquery
var arr=[48956, 96448, 35780];
//var arr=[96448, 35780];
var diff=[];
$.each(arr,function(i,v){
//96448 - 35780 = 60668 / 96448 = 0,629 * 100 = 62,9%
if(i==arr.length-1){
diff.push('---');
return;
}
var first=v;
var second=arr[i+1];
var calc =(((first - second)/first)*100).toFixed(2)+'%';
diff.push(calc);
});
alert(diff.toString());
代码使用 Javascript
var arr=[48956, 96448, 35780];
//var arr=[96448, 35780];
var diff=[];
for(var i=0;i<arr.length;i++)
{
//96448 - 35780 = 60668 / 96448 = 0,629 * 100 = 62,9%
if(i==arr.length-1){
diff.push('---');
}else{
var first=arr[i];
var second=arr[i+1];
var calc =(((first - second)/first)*100).toFixed(2)+'%';
diff.push(calc);
}
}
alert(diff.toString());
要计算变化,您可以这样做:
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
这将 return 列出您每年的增长 (%)。
使用Array.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]
我有一个 table 显示一年中每个月的值。它看起来像:
Month | 2015 |
----------------
Jan | 4856 |
Feb | 6521 |
Mar | .... |
Apr | .... |
May | .... |
Jun | .... |
Jul | .... |
Aug | .... |
Sep | .... |
Oct | .... |
Nov | .... |
Dec | .... |
----------------
SUM | 48956 |
我有一个像这样收集所有 SUM 值的数组:
sum = [48956]
然后用户可以选择向 table 添加更多年份的值,例如:
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年相比等等..
我怎样才能抓住前任。数组中的 96448 和 35780 计算 2014 年的 diff 值,然后将相同的每个新的年份添加到 table?
96448 - 35780 = 60668 / 96448 = 0,629 * 100 = 62,9%
当然,第一年(本例中为 2013 年)没有差异。
代码使用 jquery
var arr=[48956, 96448, 35780];
//var arr=[96448, 35780];
var diff=[];
$.each(arr,function(i,v){
//96448 - 35780 = 60668 / 96448 = 0,629 * 100 = 62,9%
if(i==arr.length-1){
diff.push('---');
return;
}
var first=v;
var second=arr[i+1];
var calc =(((first - second)/first)*100).toFixed(2)+'%';
diff.push(calc);
});
alert(diff.toString());
代码使用 Javascript
var arr=[48956, 96448, 35780];
//var arr=[96448, 35780];
var diff=[];
for(var i=0;i<arr.length;i++)
{
//96448 - 35780 = 60668 / 96448 = 0,629 * 100 = 62,9%
if(i==arr.length-1){
diff.push('---');
}else{
var first=arr[i];
var second=arr[i+1];
var calc =(((first - second)/first)*100).toFixed(2)+'%';
diff.push(calc);
}
}
alert(diff.toString());
要计算变化,您可以这样做:
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
这将 return 列出您每年的增长 (%)。
使用Array.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]