Я действительно новичок в JavaScript, поэтому извините меня, если этот вопрос может показаться немного неутешительным.
Я пытаюсь написать функцию, которая выполняет следующее:
1. принимает один массив чисел и возвращает сумму чисел в массиве. 2. Если пусто, возвращает 0.
let num3 = function sumNumbers([index]) {
if (index != "number") {
return 0;
}
else {
[index].reduce((a, b) => a + b, 0)
}
}
num3(1, 2, 3);
Однако я получаю эту ошибку:
Uncaught TypeError: number 1 is not iterable (cannot read property Symbol(Symbol.iterator))
at sumNumbers (main.js:16:31)
at main.js:25:1
Кто-нибудь знает решение? был бы очень признателен :)
Вот фиксированный код: jsfiddle.net/rs46bp9c



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете перебрать массив с помощью цикла for и увеличивать sum на каждой итерации и, наконец, возвращать его.
Если в массиве нет чисел, функция вернет начальное значение sum, то есть 0.
function addNums(nums) {
let sum = 0;
for (let i = 0; i < nums.length; i++) {
sum += nums[i];
}
return sum;
}
console.info(addNums([1, 2, 3]));
console.info(addNums([]));Вы также можете использовать Array.prototype.reduce и выполнить расчет за один шаг.
const addNums = (nums) => nums.reduce((s, n) => s + n, 0);
console.info(addNums([1, 2, 3]));
console.info(addNums([]));Я не совсем понимаю, почему отрицательные голоса за этот ответ. Он работает и имеет объяснение. +1 от меня за время + усилия, потраченные на это. Кстати: const addNums = (nums) => (nums || []).reduce((s, n) => s + n, 0); --> и мы можем избежать троичного кода и обрабатывать ложные входные данные. :-)
@ jsN00b Да, я обновил свой ответ, никаких условий не нужно.
вы написали функцию
num3, ожидающую массив в качестве первого аргумента, но вызовите ее с1в качестве первого аргумента, который не является итерируемым (или массивом) - если функцияaccepts a single array of numbers- то онаnum3 = function(arr) {.... и вызывается какnum3([1,2,3])- т.е. противоположное тому, как вы это написали