如果我需要使用具有动态值的特定公式计算某些东西。问题是这个公式正在根据代表值进行更改,例如我不想在公式中包含零值的元素。
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 :(得分:1)
我会将公式分解成碎片,给每个人自己的方法,然后将这些方法插入公式中。在这些方法中,我会检查0或NaN值,并返回所需的结果。例如,在上面的示例中,如果三是0或NaN,我将从其方法部分返回4。如果它是你可以使用的值,那么我会根据需要返回三个*。
您可以将相同的方法用于5 * 5.依此类推。如果你的方法总是某个数字乘以另一个数字,或者返回不为零的数字,只需让它接受两个整数并传入所需的值或变量。
类似的东西:
MultiplyOrReturnWhicheverIsNotZero(num1, num2){
if (num1 === NaN || num1 === 0) return num2;
if (num2 === NaN || num2 === 0) return num1;
return num1 * num2
}
答案 1 :(得分:1)
当值设置为0时,它将"忽略"该部分因为0 * X = 0且数字加0仍然是数字?如此忽略?因此,你可以在html中为你的每个数字元素提供一个你想要的类,它是" .numbers"。并循环遍历它们,创建一个对象并为每个非整数赋值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) + ...
答案 2 :(得分:0)
我认为这里真正的优点是其中一个变量不是数字。
// example
var one = isNaN($('#one').val()) ? 0 : $('#one').val();
答案 3 :(得分:0)
首先 - 为您的div添加一个类,例如to_calculate
比向此类添加事件:
$('.to_calculate').on('change', function(){
if(parseInt($(this).val()) != 'NaN'){
make_calculations()
}
})
当然将您的计算结果放入make_calculations
函数
答案 4 :(得分: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);
})
它可能会帮助你。在我提出条件的地方,您可以添加条件