2015-11-03 74 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) + ... 

有很多情況下,我應該知道的。如果三個是NaN0我應該跳過該部分,並且對於所有其他元素都是相同的。

你會如何做到這一點?

+0

爲什麼不用'0'替換NaN值? '(0 * 4)+ 5'與'5'相同 – Hacketo

回答

1

我會將公式分解成幾部分,給每個公式分配自己的方法,然後將這些方法插入到公式中。在這些方法中,我會檢查0或NaN值,並返回所需的結果。例如,在你上面的例子中,如果three是0或NaN,我會從它的方法部分返回4。如果它是一個可以使用的值,那麼我會根據需要返回三個* 4。

您可以對5 * 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

首先 - 添加一個類你的div像to_calculate

比你可以將事件添加到這個類:

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

當然,把你的計算到make_calculations功能

1

當該值設置爲0時,它會「忽略」該部分,因爲0 * X = 0並且數字加0仍然是數字?所以忽略?因此,您可以在您的「.numbers」中爲您希望的html類中的每個數字元素提供它。並循環遍歷它們,創建一個對象並給每個非整數賦值0 ...然後將新生成的對象集成到公式中。除此之外,您可以更改NaN應該在函數之前獲得的數值。

用這種方式,你可以聲明所有與循環中的元素和不具有待辦事項這樣的:

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,並假設你想做什麼。 我已經創建了一個 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); }) 它可能會幫助你。在哪裏我只是把條件,你可以添加你的條件