错误为Uncaught TypeError: data.reduce is not a function
,并显示在此处的注释行中显示:
function stdDev(values) {
var avg = average(values);
var squareDiffs = values.map((value) => {
return (value - avg) * (value - avg);
});
return Math.sqrt(average(squareDiffs));
}
function average(data) {
var sum = data.reduce((sum, value) => {//this is the line in question
return sum + value;
});
return sum / data.length;
}
$("#std").html(stdDev(12,21,32,34,18,26));
此代码位于<script>
文档中的.ejs
标记内。我不知道为什么标准功能不可用,我们将非常感谢任何帮助。
答案 0 :(得分:3)
Array.reduce适用于数组,似乎你传递的是一个对象而不是一个数组,
将您的方法调用代码更改为
$("#std").html(stdDev([12,21,32,34,18,26]));
答案 1 :(得分:3)
您需要在调用stdDev
$("#std").html(stdDev([12,21,32,34,18,26]));
答案 2 :(得分:3)
您将数字作为一系列参数传递,而不是数组。 values
实际上是您传递的第一个数字,而不是数组。使用rest parameters收集数组中的所有数字:
function stdDev(...values) {
const avg = average(values);
const squareDiffs = values.map((value) => (value - avg) * (value - avg));
return Math.sqrt(average(squareDiffs));
}
function average(data) {
const sum = data.reduce((sum, value) => sum + value);
return sum / data.length;
}
console.log(stdDev(12,21,32,34,18,26));
答案 3 :(得分:2)
您使用一系列数字拨打{age: 1}
:
stdDev
但声明需要一个数组:
stdDev(12,21,32,34,18,26)
所以当你打电话时
function stdDev(values) {
你正在传递var avg = average(values);
,这不是数组。