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

JavaScript计算多维数组商品总价返回NaN问题求助

问题根源

  • total变量仅声明未初始化,默认值为undefined,undefined和数值执行加法运算时结果直接为NaN,这是你遇到问题的核心原因
  • 现有累加逻辑仅累加了商品单价,未乘以对应商品的购买数量,计算结果不符合实际业务需求
  • 未对用户输入的价格、数量做合法性校验,若用户输入非数字内容,parseInt转换后会得到NaN,也会导致最终结果异常

修正方案

首先在使用total前给它初始值0,其次调整累加逻辑为 单价*数量,同时增加输入合法性校验,修正后的JS代码如下:

let carrito = [];
let continuar;
let figura;
let precio;
let cantidad;
// 初始化total为0
let total = 0;
do{
    figura = prompt("Figura de acción:");
    precio =  prompt("Precio:");
    cantidad = prompt("Cantidad:");
    // 简单校验输入合法性,不是数字就要求重新输入
    while(isNaN(parseInt(precio)) || isNaN(parseInt(cantidad))){
        alert("价格和数量必须为数字,请重新输入");
        precio =  prompt("Precio:");
        cantidad = prompt("Cantidad:");
    }
    carrito.push([figura, parseInt(cantidad), parseInt(precio)]);
    continuar = prompt("¿Continuar?");
}while(continuar != "n");
console.log(carrito)
crearTabla()
function crearTabla(){
    let tabla = "<thead><tr><th>Producto</th><th>Cantidad</th><th>Precio</th></tr></thead>"
    for (var i = 0; i < carrito.length; i++) {
        tabla += `<tr><td>${carrito[i][0]}</td><td>${carrito[i][1]}</td><td>${carrito[i][2]}</td></tr>`;
        // 累加逻辑改为 单价*数量
        total += carrito[i][2] * carrito[i][1];
        console.log(carrito[i][2]);
    }
    tabla += `<tr><td>---</td><td>Subtotal:</td><td>${total}</td></tr>`;
    document.getElementById("factura").innerHTML = tabla;
}

额外说明:你现有HTML代码中按钮绑定的calcular()函数未定义,如果需要点击按钮再触发输入和计算逻辑,把上述代码中do while循环和crearTabla()调用的逻辑放到calcular函数内即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:04