Math.max()方法获取数组中的最大值返回NaN问题分析
2023-04-18 14:47:11 时间
今天群里边有人问到 Math.max()
方法返回 NaN
的问题,我简单举个例子,看下图:
看上去没什么问题,但为什么返回 NaN
呢?我们先简单看一下 Math.max()
方法:
Math.max()
Math.max()
函数返回一组数中的最大值。
Demo:
console.log(Math.max(1, 3, 2));
// expected output: 3
console.log(Math.max(-1, -3, -2));
// expected output: -1
const array1 = [1, 3, 2];
console.log(Math.max(...array1));
// expected output: 3
语法:
Math.max(value1[,value2, ...])
参数:一组数值
value1, value2, ...
返回值:
返回给定的一组数字中的最大值。
注意:如果给定的参数中至少有一个参数无法被转换成数字,则会返回 NaN
。
问题解决
仔细观察可以发现,代码中使用了 ...
解构,这没问题,ES6 语法是支持这样了,会把数组解构成一组值。
但这里的问题是 array
是一个二维数组,解构完还是一个数组,而非数字,所以返回 NaN
了。
除此之外,还会有一些场景会出现 NaN
,简单举例:
var arr=[1,2,3,45,66]
var num =Math.max(arr.join(','))
alert(num)
如果这样写,用 arr.join(',')
得到的是字符串,就相当于一个字符串了:
Math.max( '1,2,3,45,66' );
解决方法:
var arr = [1,2,3,45,66]
var num = Math.max.apply( null, arr );
console.log( num );
apply
的第二个参数是参数数组。
或者:
var arr = [1,2,3,45,66]
var num = eval( 'Math.max(' + arr.join( ',' ) + ')' );
console.log( num ); // 66
如果坚持要用字符串拼接参数,可以用 eval
方法。
未经允许不得转载:w3h5 » Math.max()方法获取数组中的最大值返回NaN问题分析
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击