javascript - 计算数组javascript中的百分比

标签 javascript

我有一个这样的数组:

var data = 
    [
       {label:1, quater :'Q1', y:34},
       {label:2, quater:'Q1', y:20},
       {label:3, quater:'Q1', y:30},

       {label:1, quater:'Q2', y:77},
       {label:2, quater:'Q2', y:52},
       {label:3, quater:'Q2', y:3},

       {label:1, quater:'Q3', y:65},
       {label:2, quater:'Q3', y:12},
       {label:3, quater:'Q3', y:9},

       {label:1, quater:'Q4', y:77},
       {label:2, quater:'Q4', y:34},
       {label:3, quater:'Q4', y:5}
    ];

我的目标是在每个对象中添加“百分比”。每个“百分比”是当前对象中 y 值除以 Q1 到 Q4 中 y 值之和的百分比。例如,第一个项目的百分比应为 34/(34+77+65+77) 下面的代码是我尝试过的。它可以正常工作并正确计算数据。我是javascript新手,所以我一步步计算数据,这让代码看起来很长。

我想知道计算数据以缩短代码的更聪明的方法是什么?谢谢!

var quater = ["Q1","Q2","Q3","Q4"];
var sum = 0;
var arr = [];
for(var i = 0; i<quater.length; i++){
  for(var j = 0; j<data.length; j++){
    if (data[j]['quater'] == quater[i])
      sum = sum + data[j]['y'];        
  }
 //console.log(sum)    
 arr.push({
   'quater': quater[i],
   'sum': sum
 })
  sum = 0;
}
var arr1 = [];
var percent;
for(var i = 0; i<data.length;i++){
  for(var j = 0; j<arr.length; j++){
    if(data[i]['quater'] == arr[j]['quater']){
      percent = data[i]['y']/arr[j]['sum'];
    }
  }
  //console.log(percent)
  arr1.push({
    'label': data[i]['label'],
    'y': data[i]['y'],
    'quater': data[i]['quater'],
    'percent': percent
  });
}

console.log(arr1)

最佳答案

可以创建一个以 quater 为键并以总和为值的简单对象。

然后再次遍历数组并计算百分比

var totals={};

data.forEach(function(item){
  totals[item.quater] = (totals[item.quater] || 0 ) + item.y;
});

// totals now looks something like {Q3:18, Q1:16, Q4:66, Q1:12}

data.forEach(function(item){
   item.percent = 100 * item.y / totals[item.quater];
});

假设 label 不重要,例如代表年份。如果没有将 label 、 delimiter 和 quater 连接到对象键中

编辑:我可能有这个倒退,需要label作为键。方法相同

关于javascript - 计算数组javascript中的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611485/

相关文章:

javascript - NODEJS 和 mysql-node 并且没有数据库更改

javascript - 服务器和客户端上带有 Handlebars.js 的 Node.js

javascript - 使用 Karma + Jasmine 对 Browserify 项目进行单元测试

javascript - 如何动态计算每页分页显示多少个项目

javascript - Array.length 有时不会重新检查数组长度

javascript - 如何处理下拉列表的小数值而不舍入或 trim 零

javascript - JsonWebToken错误: jwt must be provided

javascript - 选择 2 : override 'container' in formatSelection

javascript - 对 drupal 模块的 Ajax 调用不起作用

javascript - 变量在函数外不起作用