Перебор массива и сложение нечетных чисел, в то время как все, что не является числом

#javascript #arrays

Вопрос:

Я пытаюсь написать цикл, который проходит через массив, определяет, является ли значение числом, затем проверяет, является ли оно нечетным числом, и если да, то добавляет нечетное число в oddTotal.

 function addOdds(numArray) {
  //implement this function
    var oddTotal = 0
    for (var i=0; i < numArray.length; i  ) {      //this iterates through the array
    if (numArray[i] !== typeof(value)) {
      i  
    }
    else if (numArray[i] % 2 !== 0) {          //this checks if the number value is odd (assuming that it is a number value)   
      oddTotal  = numArray[i];
      }
      }

 return oddTotal;
    }
  
var numArray = [1, 11, 20, 21, 30, 'fat'];
console.log (addOdds(numArray));
 

Моя функция работает, если я предполагаю, что все значения являются числами, но не могу игнорировать любые другие типы данных.

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

1. Как ты думаешь numArray[i] !== typeof(value) , что он делает? Пожалуйста, ознакомьтесь с документацией по typeof .

Ответ №1:

Я воспользовался Номером.isInteger, и это решение сработало!

 function addOdds(numArray) {
  //implement this function
    var oddTotal = 0; 
    for (var i=0; i < numArray.length; i  ) {      //this iterates through the array
    
    //this checks if the number value is odd (assuming that it is a number value AND if the number is an integer)   
    if (numArray[i] % 2 !== 0 amp;amp; Number.isInteger(numArray[i])  ) { 
      oddTotal  = numArray[i];
      }
      }

 return oddTotal;
    }
  
var numArray = [1, 11, 20, 21, 30, 'fat', ];
console.log (addOdds(numArray));
 

Ответ №2:

Вы можете проверить, не является ли каждый элемент массива целым числом ! Number.isInteger(numArray[i]) или числом typeof numArray[i] !== 'number'

 function addOdds(numArray) {
    var oddTotal = 0
    for (var i=0; i < numArray.length; i  ) {  
        if(! Number.isInteger(numArray[i])) {
            continue;
        } else if (numArray[i] % 2 !== 0) {
            oddTotal  = numArray[i];
        }
    }

    return oddTotal;
}
  
var numArray = [1, 11, 20, 21, 30, 'fat'];
console.log (addOdds(numArray));
 

Ответ №3:

Вы можете продолжить работу с функцией уменьшения для описанного выше сценария:

 numbers = [1,2,3,4,5,6,7,8,9,'js','abc'];

reducer = (sum, currentValue) => currentValue%2!=0 amp;amp; !isNaN(currentValue) ? sum   currentValue : sum;

console.log(numbers.reduce(reducer,0));
 

«0» — это начальное значение суммы.