You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在forEach循环中累加valor变量值异常,请求技术帮助

问题分析与修复

原代码核心问题

  • 累加逻辑错误:toFixed(2)返回字符串,直接相加会变成字符串拼接,且每次都是将当前值与自身相加,而非累加总和
  • jQuery选择器错误:$("pagmfalta") 缺少类选择器前缀.,应改为$(".pagmfalta")
  • 输出逻辑混乱:遍历子项时直接拼接数值,未在每个Id的所有子项处理完成后统一输出总和

修正后的完整代码

JavaScript部分

var data = [
   {Id: "552", valor:  "50.00", Descricao: "Fraldas"},
   {Id: "552", valor: "35.00", Descricao: "Creme"},
   {Id: "545", valor: "23.00", Descricao: "Caneta"},
   {Id: "545", valor: "15.00", Descricao: "Caderno"},
   {Id: "602", valor: "23.00", Descricao: "Caneta"},
   {Id: "602", valor: "15.00", Descricao: "Caderno"},
];

// 按Id分组逻辑保留,无问题
var results = data.reduce(function(results, org) {
  (results[org.Id] = results[org.Id] || []).push(org);
  return results;
}, {});

$(document).on('click', '.dad-pagamento', function() {
  var linha = '';
  
  Object.keys(results).forEach(id => {
    linha += `<p>ID ${id} 总计:`;
    var ValorPacote = 0;
    
    // 遍历当前Id下所有项,完成数值累加
    results[id].forEach(item => {
      ValorPacote += parseFloat(item.valor);
    });
    
    // 累加完成后统一格式化并拼接结果
    linha += `${ValorPacote.toFixed(2)}</p>`;
  });
  
  $('#minhaDiv1').show();
  $(".pagmfalta").html(linha);
});

HTML部分

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button type="button" tabindex="0" class="dropdown-item btn-show dad-pagamento">Teste</button>

<section id="s1">
  <div style="display:none" id="minhaDiv1">
    <button type="button" tabindex="0" class="dropdown-item" id="btnPrint" style="text-align:right;">Print</button>
    <div id="printThis">
      <div class="row pagmfalta"></div>
    </div>
  </div>
</section>

修复说明

  1. 先完成纯数值累加,最后再用toFixed(2)格式化,彻底避免字符串拼接错误
  2. 修正jQuery选择器,确保能正确定位目标DOM元素
  3. 调整输出逻辑,每个Id的总和在遍历完所有子项后统一输出,结果展示更清晰

内容的提问来源于stack exchange,提问作者Bruno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:35:14