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

如何使用Math.max.apply()避免出现NaN结果?

解决数组含非数字元素时求最大值返回NaN的问题

原代码中数组包含非数字元素"!NUM",直接调用Math.max.apply会因无法解析该元素返回NaN,可通过以下方式妥善处理:

方法一:先过滤有效数字再计算

在求最大值前,筛选出数组中能被解析为有效数字的元素,再执行最大值计算:

var p = ["!NUM", 35,2,65,7,8,9,12,121,33,99];

Array.prototype.max = function() {
  // 筛选出可转为有效数字的元素
  const validNums = this.filter(item => !isNaN(parseFloat(item)) && isFinite(item));
  // 处理空数组情况,返回默认值避免无意义结果
  return validNums.length ? Math.max.apply(null, validNums) : 0;
};

alert("Max value is: "+p.max());

方法二:转换元素后过滤NaN

先将数组所有元素转为数字类型,再剔除转换后得到的NaN值,最后计算最大值:

var p = ["!NUM", 35,2,65,7,8,9,12,121,33,99];

Array.prototype.max = function() {
  const numArr = this.map(item => Number(item)).filter(num => !isNaN(num));
  return numArr.length ? Math.max(...numArr) : 0;
};

alert("Max value is: "+p.max());

注意事项

  • 两种方法核心都是确保Math.max仅接收有效数字参数,从根源避免NaN产生
  • 若过滤后数组为空(比如所有元素都是非数字),需根据业务场景返回合理默认值(如0)或提示信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:25:21