在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>
修复说明
- 先完成纯数值累加,最后再用
toFixed(2)格式化,彻底避免字符串拼接错误 - 修正jQuery选择器,确保能正确定位目标DOM元素
- 调整输出逻辑,每个Id的总和在遍历完所有子项后统一输出,结果展示更清晰
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

