Javascript平均值
我正在努力学习Javascript。我构建了以下代码来从一组数字中找到平均值。除了最后一个返回值始终为NaN之外,它可以正常工作。我不明白为什么。如果我把这部分移到块外,它似乎完全忘记了变量和应该等于什么。是否有某种全局变量类型的等价物我应该用于JSJavascript平均值,javascript,arrays,Javascript,Arrays,我正在努力学习Javascript。我构建了以下代码来从一组数字中找到平均值。除了最后一个返回值始终为NaN之外,它可以正常工作。我不明白为什么。如果我把这部分移到块外,它似乎完全忘记了变量和应该等于什么。是否有某种全局变量类型的等价物我应该用于JS var average = function(myarray) { sum = 0; for (counter = 0; counter <= myarray.length; counter++) { sum
var average = function(myarray) {
sum = 0;
for (counter = 0; counter <= myarray.length; counter++) {
sum = sum + myarray[counter];
average = sum / myarray.length;
console.log(average);
};
}
average([1, 2, 3])
var average=函数(myarray){
总和=0;
for(counter=0;countermyarray[myarray.length]
是未定义的
,这会使您的计算沉迷于NaN
(不是数字)
把它改成
for(counter = 0; counter < myarray.length; counter ++) {
// ...
}
for(计数器=0;计数器
由于您刚刚开始学习,您应该知道,在类似这样的for循环中不使用.length是一种很好的做法。这会导致代码必须检查每个循环中数组的长度。请记住。length返回数组中的元素数;但数组索引从0开始
for(var counter = 0, length = myarray.length; counter < length; counter++){
}
for(var counter=0,length=myarray.length;counter
这是正确的方法。改变
counter <= myarray.length
计数器
不要在使用变量时不使用var
关键字声明它们,否则它们将成为全局属性
JavaScript数组是基于零索引的数组。因此,如果数组的大小为3,那么第一个元素将使用0访问,最后一个元素使用2访问。JavaScript非常宽容,因此当您访问数组中无效索引处的元素时,它只会返回未定义的
在迭代过程中,您将使用average
值替换当前函数对象。因此,对average
的后续调用将失败,因为average
不再是函数对象
一个好的做法是让函数返回计算值,而不是打印值,这样它就不会违反规则
就你而言
for (counter = 0; counter <= myarray.length; counter++) {
因此,您需要更改代码,如下所示
function Average(myarray) {
var sum = 0, counter;
for (counter = 0; counter < myarray.length; counter++) {
sum = sum + myarray[counter];
}
return sum / myarray.length;
}
function Average(myarray) {
var sum = 0;
myarray.forEach(function(currentNumber) {
sum += currentNumber;
});
return sum / myarray.length;
}
function Average(myarray) {
return myarray.reduce(function(sum, currentNumber) {
return sum + currentNumber;
}, 0) / myarray.length;
}
更好的是,你可以这样计算总和
function Average(myarray) {
var sum = 0, counter;
for (counter = 0; counter < myarray.length; counter++) {
sum = sum + myarray[counter];
}
return sum / myarray.length;
}
function Average(myarray) {
var sum = 0;
myarray.forEach(function(currentNumber) {
sum += currentNumber;
});
return sum / myarray.length;
}
function Average(myarray) {
return myarray.reduce(function(sum, currentNumber) {
return sum + currentNumber;
}, 0) / myarray.length;
}
可以按如下方式计算数字数组的平均值:
var avg = c => c.reduce((a,b) => a +b) / c.length;
avg([1,2,3])
您有也应该将平均值的计算放在for
循环结束后,因为它只需要计算一次。此外,sum/myarray.length
将不是平均值,sum/(counter+1)
是(如果您在运行平均值)。如果您只想要总平均值,@jfriend00是您的朋友。而且,您正在尝试将平均值分配给函数。我猜您应该返回平均值。最好的答案是用文字描述更改的内容和原因。也可以在数组上使用.reduce()
。