- Напишите функцию с именем sumNumbers, которая принимает один массив чисел и возвращает сумму чисел в массиве

Я действительно новичок в 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

Кто-нибудь знает решение? был бы очень признателен :)

вы написали функцию num3, ожидающую массив в качестве первого аргумента, но вызовите ее с 1 в качестве первого аргумента, который не является итерируемым (или массивом) - если функция accepts a single array of numbers - то она num3 = function(arr) { .... и вызывается как num3([1,2,3]) - т.е. противоположное тому, как вы это написали

Bravo 10.05.2022 10:41

Вот фиксированный код: jsfiddle.net/rs46bp9c

Chris G 10.05.2022 10:43
Поведение ключевого слова "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) для оценки ваших знаний,...
5
2
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете перебрать массив с помощью цикла 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 10.05.2022 10:48

@ jsN00b Да, я обновил свой ответ, никаких условий не нужно.

Anonymous Panda 10.05.2022 10:50

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