使用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]