2015-11-03 4 views
0

, если мне нужно вычислить что-то, используя определенную формулу с динамическими значениями. Проблема в том, что эта формула изменяется на основе представленного значения, например, я не хочу включать элементы с нулевым значением внутри формулы.вычислить с помощью динамических значений

var one = $('#one').val(); 
var two= $('#two').val(); 
var three= $('#three').val(); 
var four= $('#four').val(); 
... 
var ten= $('#ten').val(); 

формула как

(one * two) + (three * 4) + (five * 5) + ... 

есть много случаев, я должен быть в курсе. Если три: NaN или 0 Я должен пропустить эту часть, и то же самое для всех остальных элементов.

Как вы это сделаете?

+0

Почему бы не заменить значения NaN на '0'? '(0 * 4) + 5' такое же, как' 5' – Hacketo

ответ

1

Я бы разложил формулу на части, предоставив каждому свой метод, а затем включив эти методы в формулу. В рамках этих методов я бы проверял значения 0 или NaN и возвращал желаемый результат. Например, в приведенном выше примере, если три равно 0 или NaN, я вернул бы 4 из его части метода. Если это значение, которое вы можете использовать, я бы вернул три * 4, как вам нужно.

Вы можете использовать тот же метод для пяти * 5. И так далее. Если ваш метод всегда имеет некоторое число раз другое число или возвращает то, что не равно нулю, просто попросите его принять два целых числа и передать нужные значения или переменные.

Что-то вроде:

MultiplyOrReturnWhicheverIsNotZero(num1, num2){ 

    if (num1 === NaN || num1 === 0) return num2; 
    if (num2 === NaN || num2 === 0) return num1; 
    return num1 * num2 

} 
0

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

// example 
var one = isNaN($('#one').val()) ? 0 : $('#one').val(); 
0

первую очередь - добавить класс к вашим дивы как to_calculate

, чем вы можете добавить событие к этому классу:

$('.to_calculate').on('change', function(){ 
    if(parseInt($(this).val()) != 'NaN'){ 
    make_calculations() 
    } 
}) 

и, конечно, поставить свои расчеты в make_calculations функции

1

, когда значение установлено в 0, оно «игнорирует» эту часть, потому что 0 * X = 0, а число плюс 0 все еще является номером? так игнорируется? поэтому вы можете указать каждый из ваших числовых элементов в html классе, который вам нужен, в моем случае его «.numbers». и проведите через них, создайте объект и дайте каждому не целому числу значение 0 ... затем интегрируйте этот новый сгенерированный объект в формулу. кроме того, вы можете изменить значение, которое должны получить номера NaN перед функцией.

с этим, как вы можете объявить все элементы с петлей и не имеют TODO это:

var one = $('#one').val(); 
var two= $('#two').val(); 
var three= $('#three').val(); 
var four= $('#four').val(); 
... 

не проверял, но он должен делать эту работу.

var alternativeNumber = 0; 
$('.numbers').each(function(alternativeNumber){ 

    var id  = $this.attr('id'); 
    var val  = ''; 
    var numberObj = {}; 

    if (isNaN($($this).val())) { 
     val = alternativeNumber; 
    } else { 
     val = $this.val(); 
    } 
    numberObj[id] = val; 

    return numberObj; 
}); 

(numberObj.one * numberObj.two) + (numberObj.three * 4) + (numberObj.five * 5) + ... 
+0

numberObj не доступно за пределами $ ('. Numbers'). Каждая .. функция. – user1765862

+0

, тогда вы должны объявить его снаружи так var numberObj = {}; вне каждой функции .. тогда он должен работать –

0

Я взял образец html и предположил, что вы пытаетесь сделать. Я создал a fiddle $(document).on('click', '.calculate', function(){ var formula = ''; var value = 0; $('.calcualte_field').each(function(i,j){ ++i var val = $(this).val(); // + put your condition here if(!isNaN(val) && val){ formula +='('+val+' * '+i+') +'; value +=(i * val); } }); alert(value); $(".result").text("Your formula is "+formula +"\n result is :=" +value); }) это может вам помочь. Где я только что положил условие, вы можете добавить свои условия

Смежные вопросы