2015-11-03 77 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); }) 它可能会帮助你。在哪里我只是把条件,你可以添加你的条件