Javascript for 循环返回 "null" 而不是我的值

Javascript for-loop returning "null" instead of my value

我试图将下面的函数设为 return array1 中所有元素的平均值,但结果一直是 null。我似乎无法弄清楚为什么。

var array1 = [46,73,-18,0,-442,779,5,1400];

var arrayAverage = function(arrayavg) {
    for (var average = 0,answer=0, arrayavg = arrayavg.length;array1 > answer;answer++)
        average +=parseInt(arrayavg[answer]);

    var calc = average/arrayavg.length;
    return calc
};

你需要在 for 循环后面加上括号
我回答得太快了。

您正在将传递的数组重新分配给传递的数组的长度。

arrayavg = arrayavg.length

这会破坏一切。

您的代码在 for 循环中有两个问题。

for (var average = 0,answer=0, arrayavg = arrayavg.length;array1 > answer;answer++)
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^

首先是将 arrayavg 设置为 arrayavg 的长度,但在下一行中尝试读取数组的索引。那么你用数字覆盖了数组!不会发生的。

第二期,您将数组 'array1' 与数字 'answer' 进行比较。那个支票有什么作用?不是你认为的那样。你想检查长度,但你不想检查传入的数组,而不是硬编码的数组吗?

您正在 for 循环中将一个数字与您的数组进行比较。当 answerarray1 长度相同时,您想停止 for。

此外,如果您想在循环中获取参数数组的值,请不要将其长度更改为它的长度。

var array1 = [46,73,-18,0,-442,779,5,1400];

var arrayAverage = function(arrayavg) {
    for (var average = 0,answer=0, len = arrayavg.length;len > answer;answer++)
        average +=parseInt(arrayavg[answer]);
    var calc = average/len;
    return calc
};

并调用它:

arrayAverage(array1);

在 for 循环中,您已分配 arrayavg=arrayavg.length,在正文中,您正在访问 average+=arrayavg[answer]。 arrayavg 现在是原始类型。它将 return 未定义。

你的循环条件是 array1 > answer array1 是一个数组。你不能像 that.it 那样比较它 return false。

修改代码。

var array1 = [46,73,-18,0,-442,779,5,1400];

var arrayAverage = function(arrayavg) {
var sum=0; 
for (var i=0;i<arrayavg.length;i++)
    sum +=parseInt(arrayavg[i]);
 return sum/arrayavg.length;
};

有很多错误,我没有时间指出所有错误,希望以下内容足够了:

var array1 = [46,73,-18,0,-442,779,5,1400];

var arrayAverage = function(arrayavg) {

我不知道你为什么使用函数表达式而不是函数声明。它不会影响问题,但需要编写更多代码。给变量命名来表达它们的用途也很好,所以假设函数需要一个数组:

function arrayAverage(array) {

然后:

  for (var average = 0,answer=0, arrayavg = arrayavg.length;array1 > answer;answer++)

将所有这些变量声明堆放在 for 条件中并不是一个好主意,分离关注点并只创建您需要的变量要好得多:

  var total = 0;

现在遍历数组以获得总值。 '{'括号可以省略,但包含它们更清楚:

  for (var i=0, iLen=array.length; i<iLen; i++) {
    total += array[i];
  }           

现在计算平均值并return它在一个语句中:

  return total/iLen;
}

console.log(arrayAverage(array1)); // 230.375

我认为其他答案(尤其是 RobG)已经涵盖了大部分内容。为您的循环遵循一些标准规则(我使用的)可能会有所帮助:

1) 始终将索引作为 first 声明的元素,将数组的长度(用于缓存目的)作为 second ,以及它们之后的 任何其他 变量。 2) 始终使用方括号将循环代码与函数其余部分的代码分开。这样你就知道什么时候 return 你的平均产品(即在 } 之后)。

所以这是我针对你的问题稍微重写的代码:

for (var index = 0, len = arrayavg.length, avg = 0; index < len; index++) {
    avg += parseInt(arrayavg[index], 10) / len;
}
return avg;

另请注意,parseInt 应包含基数(在本例中为 10)。您可以省略它,但最好始终包含它。

顺便说一下,这里有一个函数的替代方法,您可能会发现它很有用,它使用 reduce:

的函数方法
var arrayAverage = function (arr) {
  return arr.reduce(function (a, b) { return a + b; }) / arr.length;
}