【问题标题】:Performing calculations on data via json通过 json 对数据进行计算
【发布时间】:2016-01-04 22:18:35
【问题描述】:

我正在尝试对通过 JSON 从外部来源收集的数据执行简单的添加。我得到的数据作为字符串返回,但是是一个数字,所以我尝试同时使用 parseInt() 和 Number() 均无济于事。我在下面展示了一段简单的代码:

 var total_energy = 0;
 var energy_val;

$.each(result.report.food.nutrients, function (i, v) {

if (v.name == "Energy"){

                     energy_val = v.value;

                     var energy = Number(energy_val);

                     total_energy = total_energy + energy;




                                          console.log("energy " + energy);
                                          console.log("totalenergy " + total_energy);
                                          energy_val = "";
                                          energy = 0;

  }
   }

控制台每次都会返回正确的能量值,但总能量值似乎与能量值保持不变。总和似乎没有任何影响。谁能告诉我这个问题哪里出错了?

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    console.log("energy " + total_energy); 更改为console.log("energy " + energy);

    【讨论】:

    • 谢谢,愚蠢的错误。值仍然保持不变
    • @NeilKennedy 你的控制台输出怎么样?
    • 例如,它将是能量 106,总能量 106。这是正确的能量值,但是当我单击另一个值时,它会将两个数字更改为例如能量 100,总能量 100 而不是能量 100,总能量 206
    • 我想当你点击时,var total_energy = 0; 会运行。看看吧。
    • @NeilKennedy 有了这些信息,我只能建议您调试您的代码(例如 console.log)并关注您初始化/重新分配 total_energy 变量的所有地方
    【解决方案2】:

    尝试 parseInt 你的值...可以是这样的

    【讨论】:

    • 只是尝试将 number() 更改为 parseInt()?我试过了,但也没有用
    【解决方案3】:

    我怀疑它是否是由于在您迭代项目的循环中创建的闭包。试试下面的代码。

     var total_energy = 0;
     var energy_val;
    
    $.each(result.report.food.nutrients, function (i, v) {
            var item = v;
           //Calling calculateEnergy() function so that each 'item' is the current instance 'v'  value.
           (function calculateEnergy(itemClicked))(item);
       }
    
    function calculateEnergy(itemClicked){
       if(itemClicked.name == "Energy"){
                         energy_val = itemClicked.value;
                         var energy = Number(energy_val);
    
                         total_energy = total_energy + energy;
                         console.log("energy " + energy);
                         console.log("totalenergy " + total_energy);
                         energy_val = "";
                         energy = 0;
            }
    }
    

    我已将 cmets 放入代码中。

    更新 console.log() 存在 ajax 请求问题。因此,与其记录,不如尝试创建一个 html div 并在那里填充值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2021-07-26
      • 1970-01-01
      • 2018-03-22
      • 2021-01-13
      • 2019-06-12
      • 2022-11-25
      相关资源
      最近更新 更多