MaminProgrammist
@MaminProgrammist
Я слава беброу

Почему игнорируется !isNaN?

Учу js. Нужно было сделать программку, которая суммирует все числа в объекте, и если это не число просто пропускает его.
Возможно задача и простая, но не для меня, видимо.
Код:
const salaries = {"Vasiliy": 100,"Piotr": 300,"Daria": 250,"isPaid": false};

function sum(obj) {
    var sum = 0;
    for(var el in obj) {
        if( obj.hasOwnProperty(el) ) {
            if (!isNaN(obj[el])) {
                sum += parseFloat( obj[el] );
            }
        }
    }
    return sum;
}

alert(sum(salaries))


На первый взгляд все суммируется и норм, но почему-то игнорируется !isNaN и вместе с числами пытается суммироваться "isPaid", равная false. В итоге, что логично, пользователю выводится NaN.
Скажите пожалуйста - в чём проблема?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
isNaN() проверяет, что аргумент — это NaN – специальное значение НеЧисло ("NaN" = "Not a Number")

Вам же, наоборот, нужно убедиться что аргумент — именно число:
Object.values(
  { "Vasiliy": 100, "Piotr": "300", "Daria": 250, isPaid: false }
)
  .map(parseFloat) // что можно – преобразовать в число, или NaN
  .filter(value => !isNaN(value)) // отсеить NaN, оставить только числа
  .reduce((acc, c) => acc + c) // суммировать
// 650
Ответ написан
Seasle
@Seasle Куратор тега JavaScript
isNaN(false) --> false
!isNaN(false) --> true
parseFloat(false) --> NaN
100 + NaN --> NaN
https://developer.mozilla.org/en-US/docs/Web/JavaS...
Также if( obj.hasOwnProperty(el) ) { лишнее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы