如何对数组中字符串类型的数值求和?JS代码求和异常求助
问题解决方法
你的求和结果出现字符串拼接的原因有两个:
shipPrice的每个元素是嵌套数组,直接取data.shipPrice[i]拿到的是数组而非数字字符串- 即使拿到数字字符串,直接和数值相加会触发字符串拼接,而非数学加法
修正后的代码
const data = { countTotal: 2, shipPrice: [ ["17.50"], ["7.00"] ], shippingFrom: ["SARAWAK", "KUALA LUMPUR"] } var totalShipping = 0; for (var i = 0; i < data.countTotal; i++) { // 取出嵌套数组里的价格字符串,转成浮点数 const price = parseFloat(data.shipPrice[i][0]); // 用class代替重复id,避免DOM id冲突 $("#ShippingFromJson").append('<li class="shipping-item">' + data.shippingFrom[i] + '<span class="shipping-price">RM ' + price + '</span></li>'); // 累加数值类型的价格 totalShipping += price; } // 用toFixed保留小数位数,确保结果格式符合预期 $("#isTotal").html(totalShipping.toFixed(1));
对应的HTML(修正id重复问题)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <ul id="ShippingFromJson"></ul> <span id="isTotal"></span>
关键修正点
- 取价格时要访问嵌套数组的第一个元素:
data.shipPrice[i][0] - 用
parseFloat()将字符串转换成浮点数值,再进行加法运算 - 移除循环中重复的id(同一个页面id必须唯一),改用class标识元素
- 可选:用
toFixed(1)确保结果保留一位小数,和预期的24.5格式一致
内容的提问来源于stack exchange,提问作者oos
相关产品推荐
相关产品推荐

