Javascript for-loop返回" null"而不是我的价值

时间:2015-03-09 12:48:31

标签: javascript arrays for-loop

我尝试使用下面的函数返回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
};

6 个答案:

答案 0 :(得分:2)

你需要在for循环后加上括号
我太快了,不能回答。

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

arrayavg = arrayavg.length

这打破了一切。

答案 1 :(得分:2)

有很多错误,我没有时间指出它们,希望以下就足够了:

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 total/iLen;
}

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

答案 2 :(得分:1)

在您已分配arrayavg=arrayavg.length的for循环中,您正在访问average+=arrayavg[answer]。 arrayavg现在是一种原始类型。它将返回undefined。

你的循环条件是array1 > answer array1是一个数组。你不能比较那样。它会返回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;
};

答案 3 :(得分:0)

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

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

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

第二个问题是您将数组'array1'与数字'answer'进行比较。那张支票做了什么?不是你认为它会发生什么。你想检查长度,但是你不想检查传入的数组,而不是硬编码的那个吗?

答案 4 :(得分:0)

您正在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);

答案 5 :(得分:0)

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

1)始终将索引作为第一个声明的元素,数组的长度(用于缓存目的)作为第二个任何其他< / em>后面的变量。 2)始终使用括号将循环代码与函数其余部分中的代码分开。这样您就知道何时返回平均产品(即}之后)。

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

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;
}