繁体   English   中英

从JS中的关联数组计算百分比

[英]Calculate percentage from associative array in JS

假设我有一个像这样的数组:

var arr = [];
arr["india"] = 7;
arr["indonesia"] = 3;
arr["usa"] = 1;

    [india: 7, indonesia: 3, usa: 1]

我需要得到一个像[india: (7/11*100), indonesia: (3/11*100), usa: (1/11*100)]的数组,即使用javascript中的一个循环。 我该如何实现?

您可以使用array#reduce汇总所有值,然后在array#map计算百分比

 var arr = {}; arr["india"] = 7; arr["indonesia"] = 3; arr["usa"] = 1; let sum = Object.keys(arr).reduce((s,k) => s += arr[k], 0); var result = Object.keys(arr).map(k => ({[k] : (arr[k]/sum * 100).toFixed(2)})); console.log(result); 

如果您的对象是这样的var arr = {india: 7, indonesia: 3, usa: 1}; ,您可以通过这种方式进行操作。

 var arr = {india: 7, indonesia: 3, usa: 1}; var sum = 0; //Finding the sum for(key in arr){ sum += arr[key]; } console.log("Sum of the object values is = " + sum); //Finding the average for(key in arr){ arr[key] = (arr[key]/sum)*100; } console.log(arr); 

像这样循环遍历每个键并重新分配值:

var countries = [];
countries["india"] = 7;
countries["indonesia"] = 3;
countries["usa"] = 1;

for (var country in countries){
    if (countries.hasOwnProperty(country)) {
        countries[country] = (countries[country] / 11 * 100).toFixed(2)
    }
}

console.log(countries)

[india: 7, indonesia: 3, usa: 1]错误,您需要一个物体,例如{india: 7, indonesia: 3, usa: 1}

因此,我认为您需要一个函数来完成您需要的操作,很简单:

var obj =  {india: 7, indonesia: 3, usa: 1}
const getPercent = (obj) {
    let sum = 0

    for (key in obj) {
        sum += obj[key]
    }

    for (key in obj) {
        obj[key] = (obj[key]/sum)*100
    }

    return obj
}

更改obj后,运行getPercent(obj) ,然后您将获得回报,这就是您所需要的。 可能有帮助。

因此,假设您有一个有效的数组:

 var myArray = { 'key1': 2, 'key2': 5, 'key3': 14 }; /* iterates through an associative array, calculates each percentage and adds it to a similar associative array The percentages are not rounded */ function getPercentagePerKey(myArray) { var sum = getSum(myArray); var arrayWithPercentages = []; for (key in myArray) { val = myArray[key]; percentage = (val / sum) * 100; arrayWithPercentages.push({key, percentage}); } return arrayWithPercentages; } /* returns the sum given from an 'associative' array */ function getSum(myArray) { var sum = 0; for (key in myArray) { sum += myArray[key]; } return sum; } percentageArray = getPercentagePerKey(myArray); console.log(percentageArray); 

0: {key: "key1", percentage: 9.523809523809524}
1: {key: "key2", percentage: 23.809523809523807}
2: {key: "key3", percentage: 66.66666666666666}

如果允许,可以从对象属性中获取吸气剂:

var arr = {};
arr["india"] = 7;
arr["indonesia"] = 3;
arr["usa"] = 1;

var sum = 0;
var percent = function(n){
  return function(){ return n/sum*100; }
}

for (var k in arr) {
  sum+=arr[k];
  arr[k]=percent(arr[k]);
}

console.log(arr.india());
console.log(arr.usa());
console.log(arr.indonesia());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM