Используя параметр 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());
Конкретнее, 0/0
, x/0
и -x/0
приведут к NaN
, Infinity
и -Infinity
соответственно.
Среднее значение нулевых чисел не определено по определению, поэтому получение NaN
вполне ожидаемо.
Но если вы настаиваете на получении 0
в этом случае, вам нужно будет указать его в особом случае, например if (numbers.length == 0) return 0;
Это именно то, что я искал. Спасибо
Если вы не хотите явно писать особый случай, вы можете вместо этого использовать функцию короткого замыкания логического оператора 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())
На ноль делить нельзя, иначе получится
NaN
. Не уверен, чего вы ожидаете, вы все равно не захотите давать значение по умолчанию0
;NaN
было бы - правильная вещь для возврата, если аргументы не переданы.