我正在使用 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%”
请让我知道如何修复我的代码。谢谢你
你的问题是你的百分比不是数字,而是字符串。
尝试控制台记录您的值
sum
,您会发现它看起来像"75.0%50.0%66.66..."
。这是因为在 JavaScript 中,+
运算符将连接字符串。
然后,当您将字符串除以数字时,您将得到 NaN。 (试试
console.log("foo"/2)
)
您需要首先将这些百分比转换为数字。
parseFloat
功能可以为您做到这一点。
您的数组包含字符串,因此
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);