Моя средняя функция возвращает nan, если нет аргументов. Как я могу заставить его вернуть 0 вместо этого?

Используя параметр rest, как я могу заставить последний журнал консоли отображать 0, если для моей функции нет аргументов. Первые три журнала консоли в порядке и возвращаются, как ожидалось, но последний журнал консоли возвращает NaN

function average(...numbers) {
let avg = 0;
for(let num of numbers) {
    avg += num;
    }
avg = avg / numbers.length;
return avg;
}

console.info(average(2, 6));
console.info(average(2, 3, 3, 5, 7, 10));
console.info(average(7, 1432, 12, 13, 100));
console.info(average());

На ноль делить нельзя, иначе получится NaN. Не уверен, чего вы ожидаете, вы все равно не захотите давать значение по умолчанию 0; NaNбыло бы - правильная вещь для возврата, если аргументы не переданы.

CertainPerformance 02.05.2018 01:32

Конкретнее, 0/0, x/0 и -x/0 приведут к NaN, Infinity и -Infinity соответственно.

Jake Holzinger 02.05.2018 01:34
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
57
2

Ответы 2

Среднее значение нулевых чисел не определено по определению, поэтому получение NaN вполне ожидаемо.

Но если вы настаиваете на получении 0 в этом случае, вам нужно будет указать его в особом случае, например if (numbers.length == 0) return 0;

Это именно то, что я искал. Спасибо

7vnKge 02.05.2018 01:41

Если вы не хотите явно писать особый случай, вы можете вместо этого использовать функцию короткого замыкания логического оператора AND &&:

function average(...values) {
  const { length } = values
  let avg = 0

  for (const value of values) {
    avg += value
  }

  return length && avg / length
}

console.info(average(2, 6))
console.info(average(2, 3, 3, 5, 7, 10))
console.info(average(7, 1432, 12, 13, 100))
console.info(average())

Другие вопросы по теме