【问题标题】:JavaScript - Calculating the percentage of each index in arrayJavaScript - 计算数组中每个索引的百分比
【发布时间】:2020-05-09 21:09:52
【问题描述】:

我正在尝试计算总结果等于 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%

【问题讨论】:

  • 你除以dataSum,它在每次迭代中都会发生变化。在不知道总数的情况下,您无法计算每个值占总数的百分比。

标签: javascript arrays loops


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我认为你不能那样做,最好使用 reducemap 这样的数组方法

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-02
      • 1970-01-01
      • 2017-11-12
      • 2021-03-18
      • 2015-09-04
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多