Не используйте переменные без объявления их var
ключевого слова, иначе они станут глобальными свойствами.
Массивы JavaScript представляют собой массивы с нулевым индексом. Итак, если размер массива равен 3, то к первому элементу будет обращено значение 0 и последнее с 2. JavaScript очень прощает, поэтому, когда вы обращаетесь к элементу с недопустимым индексом в массиве, он просто возвращает undefined
,
На итерации вы заменяете текущий объект функции значением average
. Таким образом, последующие вызовы average
потерпят неудачу, так как average
больше не является объектом функции.
Это хорошая практика, чтобы функция возвращала вычисленное значение вместо того, чтобы печатать значение, чтобы оно не нарушало Single Responsibility Principle.
В вашем случае,
for (counter = 0; counter <= myarray.length; counter++) {
В counter
работает до последнего индекса массива + 1. Так как она возвращает undefined
в последней итерации, JavaScript возвращает NaN
в арифметической операции.
console.log(1 + undefined);
# NaN
Таким образом, вы должны изменить код, как это
function Average(myarray) {
var sum = 0, counter;
for (counter = 0; counter < myarray.length; counter++) {
sum = sum + myarray[counter];
}
return sum/myarray.length;
}
Если вы заинтересованы, вы можете вычислить сумму с Array.prototype.forEach
, как этот
function Average(myarray) {
var sum = 0;
myarray.forEach(function(currentNumber) {
sum += currentNumber;
});
return sum/myarray.length;
}
Даже лучше, вы можете рассчитать сумму с помощью Array.prototype.reduce
, например
function Average(myarray) {
return myarray.reduce(function(sum, currentNumber) {
return sum + currentNumber;
}, 0)/myarray.length;
}
Вы '<= myarray.length', но последнее значение на единицу меньше длины, поэтому перейти на'
Следует также вычислить среднее значение ПОСЛЕ окончания цикла 'for', потому что его нужно только вычислить. – jfriend00
Кроме того, 'sum/myarray.length' не будет средним,' sum/(counter + 1) 'is (если вы после выполнения среднего). Если вы хотите всего всего среднего, @ jfriend00 - ваш друг. – Amadan