为什么我的 JavaScript 平均函数返回 NaN?

Why is my JavaScript averaging function returning NaN?

我正在尝试创建一个 JavaScript(纯)函数来计算一组数字的平均值。没有返回错误,但它总是 returns NaN。怎么了?这是我的代码:

var arr = [1, 2, 3, 4, 5, 6, 7, 8];

function average(datasetArr) {
  var totalSum;
  var x;
  for (x in datasetArr) {
    totalSum = datasetArr[x] + totalSum;
  }
  var average = totalSum / datasetArr.length; //keeps returning NaN
  console.log(average); //In the console: returns: "NaN"
}
average(arr);

是否有人对我的代码有任何有效的代码片段或改进?

您需要将totalSum初始化为0

如果你不初始化它,你就是在尝试给undefined加一个数

例如 3 + undefined 将计算为 NaN

附带说明,您可以使用 Array.prototype.reduce 对数组求和

var array = [1, 2, 3, 4];
var sum = array.reduce((a, b) => a + b, 0);
console.log(sum); //10

您必须先将 totalSum 变量设置为 0。如果不将其设置为零,则无法在 for 循环内将 datasetArr[x] 添加到 totalSum

解决方案:

var arr = [1, 2, 3, 4, 5, 6, 7, 8];
function average(datasetArr) {
  let totalSum = 0;

  for (let x in datasetArr) {
    totalSum = datasetArr[x] + totalSum;
    console.log(totalSum)
  }
  var average = totalSum / datasetArr.length; 
  console.log(average); //In the console: returns: "NaN"
}
average(arr);

在您的示例中,您没有将 totalSum 变量初始化为 0。

你也可以用这种方式。

var arr = [1, 2, 3, 4, 5, 6, 7, 8];

function average(datasetArr) {
  var average = datasetArr.reduce((result, current) => result += current, 0) / datasetArr.length;
  console.log(average);
}

average(arr);