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

JS计算账单总金额出现NaN问题求助

问题原因与解决方案

嘿,我一眼就找到问题所在啦!你控制台里totals输出NaN的原因其实很简单:

你给tips数组赋值的代码是:

tips = [calcTip(bills[1])];

这时候tips数组里只有索引0的位置有值(也就是对应bills第二项的小费),但你计算totals的时候却用了tips[1]——这个位置根本没有元素,结果是undefined!数字和undefined相加自然就得到NaN了。

修正后的代码

你只需要把tips[1]改成tips[0]就行,或者换一种更清晰的写法,先单独计算小费再组装数组:

const bills = [22, 295, 176, 440, 37, 105, 10, 1100, 86, 52];
let tips = [];
let totals = [];

const calcTip = function (bills) {
  return bills >= 50 && bills <= 300 ? bills * 0.15 : bills * 0.2
}

// 单独计算第二项的小费,逻辑更清晰
const secondTip = calcTip(bills[1]);
tips = [secondTip];
// 用计算好的小费算总金额,或者直接用tips[0]
totals = [bills[1] + secondTip];
// 也可以写成 totals = [bills[1] + tips[0]];

console.log(bills, tips, totals);

运行这段代码后,totals就会正确输出[339.25](也就是295 + 44.25的结果)啦!

另外顺便提一句,你注释掉的遍历数组的代码也有个小问题:const newTips = [calcTip(bills[i])];这里把小费包成了数组,push到tips里会让tips变成二维数组,直接push计算后的小费值就好,比如:

for (let i = 0; i < bills.length; i++) {
    const tip = calcTip(bills[i]);
    tips.push(tip);
    totals.push(bills[i] + tip);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:35:42