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 循环中将一个数字与您的数组进行比较。当 answer
与 array1
长度相同时,您想停止 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;
}
我试图将下面的函数设为 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 循环中将一个数字与您的数组进行比较。当 answer
与 array1
长度相同时,您想停止 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;
}