javascript: как создать функцию, которая получает любое количество аргументов и принимает среднее значение в зависимости от числа. аргументов? - PullRequest
1 голос
/ 16 апреля 2020

Я хотел создать функцию, которая получит любое количество аргументов и получит среднее значение в зависимости от числа. аргументов. Поэтому я попробовал код как показано ниже:

function takeAvg(...nums) {
	return nums.reduce((total, curVal) => {
		return (total + curVal) / nums.length;
	});
} 
console.log(takeAvg(10, 20)) // returns 15 - no problem
console.log(takeAvg(10, 20, 30)) // returns 13.333333333333334 weirdly.

Я думаю, что проблема с nums.legth, но я не понял, почему? Пожалуйста помоги. Спасибо.

Ответы [ 2 ]

4 голосов
/ 16 апреля 2020

Ваша ошибка в том, что вы делите каждый частичный результат суммирования на длину, а не только на конечный результат.

function takeAvg(...nums) {
    return nums.reduce((total, curVal) => {
        return (total + curVal);
    }) / nums.length;
} 

console.log(takeAvg(10, 20)) // 15
console.log(takeAvg(10, 20, 30)) // 20
1 голос
/ 16 апреля 2020

Попробуйте:

function takeAvg(...nums) {
	return nums.reduce((total, curVal) => {
		return (total + curVal)
	}) / nums.length;;
} 
console.log(takeAvg(10, 20))
console.log(takeAvg(10, 20, 30))

Вы спросили, почему

В предыдущем случае вы делаете:

function takeAvg(...nums) {
     return nums.reduce((total, curVal) => {
        return (total + curVal) / nums.length;
   });
} 


x = ((10+20)/3 + 30)/3 // take average of 10,20,30

console.log('maths expression : ',x)
console.log('your function : ',takeAvg(10,20,30))


x = ((((10+20)/4 + 30)/4) + 40)/4 //take average of 10,20,30,40

console.log('maths expression : ',x)
console.log('your function : ',takeAvg(10,20,30,40))

и сейчас:

x = (10 +20+ 30)/3
console.log(x)
...