假设我有一个这样的数组:计算百分比
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的一个循环得到每个国家的百分比值。我怎样才能实现它?
假设我有一个这样的数组:计算百分比
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);
这是javascript关联数组 – Nitheesh
检查'hasOwnProperty'是必需的,没有这个'for-in'通过它的原型链。 –
遍历每个键,重新分配是这样的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)
[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());
'[印度:7,indonesia:3,usa:1]' - >不是有效的JS数组或对象。 – Nisarg
为什么只有一个循环? – Titus
您的意思是[{india:7},{indonesia:3},{usa:1}]? – TGW