使用动态值计算

时间:2015-11-03 13:39:58

标签: javascript jquery

如果我需要使用具有动态值的特定公式计算某些东西。问题是这个公式正在根据代表值进行更改,例如我不想在公式中包含零值的元素。

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我应该跳过该部分,并且对于所有其他元素也是如此。

你会怎么做?

5 个答案:

答案 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); }) 它可能会帮助你。在我提出条件的地方,您可以添加条件