#javascript #loops #for-loop
#javascript #циклы #for-цикл
Вопрос:
У меня на экране до 100 входных данных, каждый из которых имеет либо числовое значение, либо значение null (поскольку он еще не был загружен на экран), я хочу иметь возможность принимать значения каждого из этих входных данных и складывать их вместе, чтобы получить конечное значение.
Я попытался сделать это с помощью цикла for, перебирая их, но как только он доходит до нулевых значений, он возвращает ошибку ‘NaN’.
Первый ввод называется ‘Input1’, второй ‘Input2’ и т.д…
Мой код ниже:
var val = 0; //assigning the final value OUTSIDE the for loop to stop it assigning itself as 0 every loop
for (var calc = 0; calc < 100; calc ) //less than 100 as of 100 inputs
{
var inputVal = $('#Input' calc).val(); //grabbing each input on screen
var floatVal = parseFloat(inputVal); // converting each value to float
var finalVal = finalValue floatVal; //takes the val of 0, and adds each input value onto it per loop
}
alert(finalVal);
Это всегда возвращает ‘NaN’.
Если я установлю для цикла for значение ‘calc < 2’, например, и загружу 2 ввода на экран, это сработает, поэтому я предполагаю, что это потому, что другие значения равны null?
Спасибо
Комментарии:
1. значение null равно false: var floatVal = (inputVal) ? parseFloat(inputVal) : 0;
2. Поэтому просто добавьте условие перед добавлением значения. Проверьте, равно ли значение null, и если да, введите оператор continue, чтобы пропустить выполнение javascript для этого элемента цикла и перейти к следующему значению. Просто сделайте это —-> if (inputVal === undefined) continue; // поместите весь код вычисления под этим.
3. эй, @anthony, ты можешь просто добавить проверку, если ввод [calc] != null, а затем только добавить еще что-то в журнал
Ответ №1:
Вы можете использовать Number.isNaN(value)
функцию для перехода к следующей итерации цикла, если значение равно NaN
.
Замечено, что в вашем коде вы объявляете val
, но затем никогда не используете его, вместо этого вы объявляете new finalVal
в каждом цикле. Вы должны объявлять finalVal
перед циклом и добавлять к нему на каждой итерации, как таковой:
var finalVal = 0;
for (var i = 0; i < 100; i )
{
var inputVal = $('#Input' i).val();
var floatVal = parseFloat(inputVal);
if (Number.isNaN(floatVal))
{
continue;
}
finalVal = floatVal;
}
alert(finalVal);
Комментарии:
1. К сожалению, Number.isNaN(null) равно false
2. @netizen Передаваемое значение
isNaN
неnull
соответствует. Это было быNaN
, поскольку это то, чтоparseFloat(null)
возвращается. Попробуйте запуститьNumber.isNaN(parseFloat(null))
в своей консоли.3. @netizen Что ж, вы будете удивлены, узнав, что опубликованный исходный код отлично сработал! теперь он подсчитывает все, игнорируя значения NaN.