Простая ошибка при добавлении нечетных элементов массива чисел

#javascript #arrays

#javascript #массивы

Вопрос:

Здесь чрезвычайно упрощенная проблема, поскольку я новичок; Я пытаюсь суммировать все нечетные значения массива чисел, но функция, которую я использую, не возвращает… что угодно. Немного потеряно относительно точной ошибки в приведенном ниже коде…

 function addOdds(numArray) {
  //create sum variable
  let sum = 0;

  for(i = 0; i < numArray.length; i  ) {
    if(numArray[i] % 2 === 1) {
      sum = sum   numArray[i];
    }
  }

  return sum;
}
  

Комментарии:

1. Что вы передаете в качестве параметра этой функции? Если вы добавляете addOdds([1,2,3,4,5,6]) , кажется, что он работает нормально.

2. Этот код работает нормально — он возвращает сумму нечетных чисел в массиве

3. Я с другими ребятами… Этот код выполняется, как и ожидалось. Это многословно и старомодно, но это работает.

4. Добро пожаловать! Старайтесь учитывать отступы и быть последовательными в кодировании. Это поможет вам и всем, кто просматривает ваш код, работать более плавно. И, если вы не являетесь мастером (и даже тогда) — не «экономьте» на точках с запятой = ВСЕГДА используйте их. PS. как говорили другие: ваш код работает для нас — покажите нам, что вы отправляете в функцию — проблема, вероятно, заключается в этом…

Ответ №1:

Хороший способ суммирования чисел в массиве — использовать array.reduce() . Это намного быстрее, чем цикл, и позволяет использовать гораздо меньше кода. Следующий пример оставляет сумму неизменной, если запись не является нечетной, и в этом случае она добавляет эту запись к сумме.

 const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
const sumOdds = arr => arr.reduce((sum,i) => i % 2 === 0 ? sum : sum   i );
console.log(sumOdds(numbers))  

Ответ №2:

если у вас есть массив, вам не нужно использовать цикл for и пытаться использовать сложную логику для индексов.

Вы можете просто использовать встроенную JS-функцию «forEach ()»;

 let sum = 0;
// nums can be any array
let nums = [1, 2, 3, 4];

nums.forEach(num => {
    if (num % 2 === 1) {
    sum = sum   num
 }})

console.log(sum)
  

Комментарии:

1. Какой смысл использовать map, если вы не создаете и не используете сопоставленный массив? Почему не Array.forEach()?

2. @user1599011 Уверен, что вы можете использовать forEach() . Это будет работать точно так же. Это зависит от обстоятельств. Вы должны знать разницу между b / w map amp; forEach . forEach() ведет себя как a pure function и возвращает тот же массив, в то время map как возвращает совершенно новый массив в качестве результата. Но в данном случае это не имеет значения. Вы forEach также можете использовать.

3. Array.forEach() ничего не возвращает; он выполняет код в обратном вызове. Array.map() возвращает массив, но поскольку этот массив не будет использоваться, я не вижу смысла в использовании map() .

4. Да, конечно, в этом случае, если вы беспокоитесь о производительности, вы должны использовать forEach() в этом сценарии.