我有一系列百分比,我想找到平均值

问题描述 投票:0回答:2

我正在使用 React JS,我正在尝试找到这个数组的平均值:

[
    "75.0%",
    "50.0%",
    "66.66666666666666%",
    "66.66666666666666%",
    "33.33333333333333%",
    "58.333333333333336%",
    "50.0%",
    "66.66666666666666%",
    "41.66666666666667%",
    "75.0%",
    "41.66666666666667%",
    "50.0%",
    "50.0%",
    "72.72727272727273%"
]

这是我当前的代码:

const percentCorrects = [
    "75.0%",
    "50.0%",
    "66.66666666666666%",
    "66.66666666666666%",
    "33.33333333333333%",
    "58.333333333333336%",
    "50.0%",
    "66.66666666666666%",
    "41.66666666666667%",
    "75.0%",
    "41.66666666666667%",
    "50.0%",
    "50.0%",
    "72.72727272727273%"
]

const sum = percentCorrects.reduce((accumulator, currentValue) => {
   return accumulator + currentValue
 }, 0);

const averaged = sum / percentCorrects.length;
console.log("averaged", averaged);

现在,我的控制台显示

averaged NaN

我查了一下:“NaN 全局属性是代表非数字的值”

您建议我如何修复代码? 我希望能够在用户界面上显示平均百分比,例如:“平均正确百分比:48%”

请让我知道如何修复我的代码。谢谢你

javascript reactjs math average reduce
2个回答
0
投票

你的问题是你的百分比不是数字,而是字符串。

尝试控制台记录您的值

sum
,您会发现它看起来像
"75.0%50.0%66.66..."
。这是因为在 JavaScript 中,
+
运算符将连接字符串。

然后,当您将字符串除以数字时,您将得到 NaN。 (试试

console.log("foo"/2)

您需要首先将这些百分比转换为数字。

parseFloat
功能可以为您做到这一点。


0
投票

您的数组包含字符串,因此

reduce
是连接字符串,而不是添加数字,您可以使用
parseFloat
来解决此问题:

const percentCorrects = [
    "75.0%",
    "50.0%",
    "66.66666666666666%",
    "66.66666666666666%",
    "33.33333333333333%",
    "58.333333333333336%",
    "50.0%",
    "66.66666666666666%",
    "41.66666666666667%",
    "75.0%",
    "41.66666666666667%",
    "50.0%",
    "50.0%",
    "72.72727272727273%"
]

const sum = percentCorrects.reduce((accumulator, currentValue) => {
   return accumulator + parseFloat(currentValue)
 }, 0);

const averaged = sum / percentCorrects.length;
console.log("averaged", averaged);

© www.soinside.com 2019 - 2024. All rights reserved.