2015-06-20 4 views
0

Я пытаюсь вычислить функцию, которая вернет среднее значение для целого числа целочисленных аргументов. Кто может помочь?Рассчитать среднее значение для произвольного числа аргументов

var Calculator = { 
    average: function(x) { 
    var num = 0; 
    for (var i = 1; i <= x.length; i++) 
    num = num + x[i]; 
    var divide = num/x.length; 
    return divide; 
} 
}; 

Когда я запускаю этот код, я получаю NaN.

Вот скрипка: http://jsfiddle.net/marcusdei/hsvr8va5/6/

--------------------> Update: Не дубликатом вопрос или ответить

Прошлые ответы сделать не поддерживают длинные поплавки.

+0

Возможный дубликат [JavaScript переменное количество аргументов для функции] (http://stackoverflow.com/questions/2141520/javascript-variable-number-of-arguments-to-function) –

+0

Не дублированный вопрос или ответ. Предыдущие ответы не поддерживают длинные поплавки. – mdarmanin

ответ

1

Вы можете использовать в JavaScript arguments внутри функции для обработки произвольного числа параметров.


 
var Calculator = { 
 
    average: function() { 
 
    var num = 0,length=arguments.length; 
 
    if(!length) return 0; 
 
    for (var i = 0; i < length; i++) 
 
      num = num + arguments[i]; 
 
    var divide = num/length; 
 
    return divide; 
 
} 
 
}; 
 

 
document.getElementById('choice').innerHTML = Calculator.average(3,4,5);
<div id="choice"></div> 
 

 
<div id="hidden"> 
 

 
</div>

Обновлено скрипку: http://jsfiddle.net/vikashvverma/hsvr8va5/11/

+0

Мне также нужно вернуть 0, если аргументы не переданы. – mdarmanin

+0

Хорошо, я получил его с: if (arguments.длина === 0) { return 0; } – mdarmanin

+1

Проверьте обновленный код. – Vikash

0

Ожидается, что X будет массивом. Если вы хотите поддерживать переменное количество аргументов, вам нужно перебрать «аргументы». Это магический массив, содержащий все аргументы, с которыми была вызвана функция.

Кроме того, индексы массива начинаются с 0 и заканчиваются на длине-1. Ваша версия пропустила первый номер в начале и вышла за пределы в конце. В результате последнего добавления будучи Num = Num + неопределенная = NaN

function() { 
    var num = 0, 
     x = arguments; 
    for (var i = 0; i < x.length; i++) 
    num = num + x[i]; 
    var divide = num/x.length; 
    return divide; 
} 

Fiddle: http://jsfiddle.net/hsvr8va5/12/

1

Там также проблемы, связанные с вашим итератора. вы перекрываете конец массива, который является NaN.

Это позволяет работать правильно:

for (var i = 0; i < x.length; i++){ 
     num = num + x[i];  
     } 

Здесь я обновил свою скрипку: http://jsfiddle.net/hsvr8va5/10/

рады ответить на конкретные вопросы, которые Вы имеете о вопросах итератора.

0

Ваша петля использует неправильное начальное значение и конечное условие. Кроме того, функция должна вызываться с массивом в качестве аргумента. Код должен выглядеть следующим образом:

var Calculator = { 
    average: function(x) { 
    var num = 0; 
    for (var i = 0; i < x.length; i++) 
     num = num + x[i]; 
    var divide = num/x.length; 
    return divide; 
} 
}; 

document.getElementById('choice').innerHTML = Calculator.average([3,4,5]); 
0

ваш код отлично, за исключением той части, где вы итерацию в вашей цикл, вот ваш код

var Calculator = { 
    average: function(x) { 
    var num = 0; 
    for (var i = 0; i < x.length; i++) 
    num = num + x[i]; 
    var divide = num/x.length; 
    return divide; 
} 
}; 

вы должны следите за Loop Invariants. Петли подвержены банановой проблеме (я знаю, как заклинание, но я не знаю, когда остановиться). JavaScript с нулевой индексацией!

Смежные вопросы