JavaScript-计算数组中每个索引的百分比



我正在尝试计算一个数组的百分比,该数组的总结果将等于100%。

let dataArr = [  10232 , 23212,  98321, 32909, 29121, 20123 ]

我首先计算数组的总和。

这是一个jsfiddle

let dataArr = [  10232 , 23212,  98321, 32909, 29121, 20123 ] 
let dataSum = 0
let finalSum = [] 
for (let i = 0; i < dataArr .length; i++) {
dataSum += dataArr[i]
}

// console.log  dataSum = 213918 

dataSum正在返回我期望的值

在同一个循环中,我现在试图将数组的每个单独索引除以datasum*100,以计算百分比。例如

index 0 -> ` 10232 / datasum * 100` = 4.8%
index 1 -> ` 23212 / datasum * 100` = 10.9% 

依此类推。并且所有百分比加起来达到100%

我正试图在处理dataSum的forloop中处理逻辑,但我在为其提供javascript逻辑时遇到了问题。

这是我的尝试:

for (let i = 0; i < dataArr .length; i++) {
dataSum += finalArr[i]
finalsum = finalArr[i] / dataSum * 100
}
//console log finalSum = [100, 69.4055734959933, 74.61844951238949, 19.984332681540497, 15.026703475321861, 9.40687553174581] having the values equaling more then 100%

我的预期结果是从dataArr返回所有值,每个索引的百分比总计为100%

您不能在同一个循环中执行此操作。求和后需要使用单独的循环。

let dataArr = [10232, 23212, 98321, 32909, 29121, 20123]
let dataSum = 0
for (let i = 0; i < dataArr.length; i++) {
dataSum += dataArr[i]
}
const finalSum = dataArr.map(item => item * 100 / dataSum);
console.log(dataSum, "dataSum")
console.log(finalSum, "finaaaal")

我认为你不能用那种方式做到这一点,最好使用像这样的reduce和map数组方法

let dataArr = [10232, 23212, 98321, 32909, 29121, 20123]
let sum = dataArr.reduce((acc, el) => acc += el)
const final = dataArr.map(el => {
let res = el * 100 / sum
//res = Math.round(res) //Uncomment this line to round results
return res
});
console.log(sum) //213918 
console.log(final) //array of final results

最新更新