如何使用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
相关产品推荐
相关产品推荐

