我有一个表格,显示一年中每个月的值。它看起来像:
Month | 2015 |
----------------
Jan | 4856 |
Feb | 6521 |
Mar | .... |
Apr | .... |
May | .... |
Jun | .... |
Jul | .... |
Aug | .... |
Sep | .... |
Oct | .... |
Nov | .... |
Dec | .... |
----------------
SUM | 48956 |
我有一个数组收集所有SUM值,如下所示:
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]
现在我想要"差异"一行显示多年来百分比的增加或减少 2014年与2013年相比,2015年与2014年相比,等等。
我怎样才能抓住前任。数组中的96448和35780并计算2014年的diff值,然后将每个新年的相同值添加到表中?
96448 - 35780 = 60668 / 96448 = 0,629 * 100 = 62,9%
当然,第一年(在这种情况下是2013年)没有差异。
答案 0 :(得分:1)
使用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]
答案 1 :(得分:0)
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());
答案 2 :(得分:0)
要计算更改,您可以执行以下操作:
let sums = [35780, 96448, 48956];
let changes = [];
for (let i = 1; i < sums.length; i++) {
changes[i] = sums[i] / sums[i-1] * 100;
}
答案 3 :(得分:-1)
以下示例包含条件,即您的年份值在数组中按升序排序(此处为arr
):
var arr = [10000, 20000, 25000, 5000];
var diffs = [];
var previousYearVal;
arr.map(function(yearVal) {
if(previousYearVal){
diffs.push( ((yearVal - previousYearVal) / yearVal) * 100 );
}
previousYearVal = yearVal;
});
console.log(diffs); // [50, 20, -400] values in percent
这将返回一个diffs
数组,其值在sum
数组中排序,这意味着第一个值表示数组中前两年值的差异(在我的示例中为10000) ,20000)。
但是如果您使用这样的数据,我会尝试使用Object
,这样可以让您更轻松地计算和参考年份。
例如,您应该考虑这样的结构:
{
years: {
2015: [ JanuaryValue, FebruaryValue ... ],
2016: [ ... ]
}
differenceToYearBefore: {
2015: diffValue,
2016: diffValue
}
}
如果你有这样的话,那么你可以更容易地遍历你的对象,同时使用键来访问正确的值来读/写而不是遍历数组而不知道你正在访问哪个值(没有& #34;你头脑中的规则&#34;)。