' array.reduce()'功能无法识别

时间:2017-12-19 19:00:37

标签: javascript

错误为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标记内。我不知道为什么标准功能不可用,我们将非常感谢任何帮助。

4 个答案:

答案 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); ,这不是数组。