jQuery-根据多种条件计算百分比

时间:2020-07-18 09:07:57

标签: javascript jquery arrays json math

我有以下代码:

   <script type="application/javascript"> 

    $(document).ready(function () {

        $("#market_value").on("change paste keyup", function() {
            
          var market_value = parseInt($(this).val());
            
          var data = [
          {"percent":"10","market_value":"10000"},
          {"percent":"20","market_value":"10001"},
          {"percent":"25","market_value":"20000"}
          ];
      
          for (var x in data) {
          
           if(market_value >= parseInt(data[x].market_value)) {
      
           console.log(percentage(market_value, data[x].percent));
           
           }
        
       };
           
        });
        
    function percentage(num, per)
    {
      return (num/100)*per;
    }
        
        
    });
    
    </script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>



<input type="text" class="form-control" id="market_value" name="market_value" value="">

我只需要一个简单的代码即可根据JSON数据列表计算market_value的百分比。

例如:

如果我输入8000,则结果必须为800(基于“百分比”字段的10%)。

如果我输入11000,则结果必须为2200(基于“百分比”字段的20%,因为它高于10001)

如果我输入50000,则结果必须为12500(基于“百分比”字段的25%,因为它高于20000)

如果我输入3000,结果必须为300(基于“百分比”字段的10%,因为它不超过10000)

我编写的代码以某种方式起作用,但是如果我输入的数字小于10000,则无任何显示。

这些不是固定值,数据(JSON)是动态的。

2 个答案:

答案 0 :(得分:0)

正如@ Andreas @和@ John @正确指出的那样,循环将结束而无需任何操作:

for (var x in data) {
    if(market_value >= parseInt(data[x].market_value)) {    // never happens for <10000
    console.log(percentage(market_value, data[x].percent));
}

为什么?

假设我们给market_value = 5555
现在,随着for的发展,您将进行以下比较:

if( 5555 >= 10000 ) { ... }
if( 5555 >= 10001 ) { ... }
if( 5555 >= 10002 ) { ... }

所有这些条件将给您false。这是问题的核心。

建议对其进行修复

  • 您引入的第四个条件都是下限(例如零)
  • 或者您可以在for循环后处理“以上皆非”的情况。

答案 1 :(得分:0)

我设法解决了这个问题:

var data = [
      {"percent":"10","market_value":"10000"},
      {"percent":"25","market_value":"20000"},
      {"percent":"20","market_value":"10001"}
      ];

   sorted_data = sortByKeyDesc(data, "market_value");

   for (var x in sorted_data) {
  
   if(market_value >= parseInt(sorted_data[x].market_value)) {

   console.log(percentage(market_value, sorted_data[x].percent));

   break;

   }else if(market_value){
   console.log(percentage(market_value, sorted_data[x].percent));   
   }


 function sortByKeyDesc(array, key) {
    return array.sort(function (a, b) {
        var x = a[key]; var y = b[key];
        return ((x > y) ? -1 : ((x < y) ? 1 : 0));
    });
}

因为json数据有时不能按该顺序排列(从最低到最高),所以首先我按最高market_value对其进行排序,然后运行百分比函数。如果值是1-10000,则应用10%(这是最后一行)

我不知道那有多脏,但效果很好。如果其他人有更好的主意,我将很高兴看到它。