2017-10-17 290 views
2

假设我有一个这样的数组:计算百分比

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的一个循环得到每个国家的百分比值。我怎样才能实现它?

+2

'[印度:7,indonesia:3,usa:1]' - >不是有效的JS数组或对象。 – Nisarg

+0

为什么只有一个循环? – Titus

+0

您的意思是[{india:7},{indonesia:3},{usa:1}]? – TGW

回答

3

您可以使用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);

0

如果你的对象是这样的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);

+0

这是javascript关联数组 – Nitheesh

+0

检查'hasOwnProperty'是必需的,没有这个'for-in'通过它的原型链。 –

0

遍历每个键,重新分配是这样的VAL:

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) 
0

[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),然后你得到回报,那就是你需要的。 可能有帮助。

0

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

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} 
0

,如果它允许您可以从对象属性干将:

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());