Math.max
JavaScript 提供了 Math.max
函数返回一组数中的最大值
用法:
Math.max([value1[,value2, ...]])
值得注意的是:
- 如果有任一参数不能被转换为数值,则结果为 NaN。
- max 是 Math 的静态方法,所以应该像这样使用:Math.max(),而不是作为 Math 实例的方法 (简单的来说,就是不使用 new )
- 如果没有参数,则结果为 -Infinity (注意是负无穷大)
而我们需要分析的是:
如果任一参数不能被转换为数值,这就意味着如果参数可以被转换成数字,就是可以进行比较的,比如:
Math.max(true, 0) // 1
Math.max(true, '2', null) // 2
Math.max(1, undefined) // NaN
Math.max(1, {}) // NaN
如果没有参数,则结果为 -Infinity,对应的,Math.min 函数,如果没有参数,则结果为 Infinity,所以:
var min = Math.min();
var max = Math.max();
console.log(min > max);
求数组最大或最小值的几种方法
1. 原始方法
const arr = [10, 2, 88, 5];
// 传统方法
let maxNum = arr[0],
minNum = arr[0];
arr.forEach((item, i) => {
maxNum = Math.max(maxNum, arr[i])
minNum = Math.min(minNum, arr[i])
})
console.log(maxNum) // 88
console.log(minNum) // 2
2. reduce()方法
既然是通过遍历数组求出一个最终值,那么我们就可以使用 reduce 方法:
const arr = [10, 2, 88, 5];
function max(prev, next) {
return Math.max(prev, next);
}
console.log(arr.reduce(max)); // 88
3. apply()方法
var arr = [10, 2, 88, 5];
console.log(Math.max.apply(null, arr))
apply 方法的最主要的作用是改变当前函数的 this
指向,还有一个作用就是将数组中的元素一个一个的当做参数传入方法,apply
方法和 call
方法基本相同, 此处 Math.max.apply(null, arr)
和 Math.max.apply(null, [10, 2, 88, 5])
相同, 所以当我们调用 apply
方法的时候,相当于把数组中的元素挨个当做参数传入方法中,这也就解决了 Math.max(min)
不能直接获取数组中的最大(小)值问题了
4. 数组排序sort()方法
如果我们先对数组进行一次排序,那么最大值就是最后一个值:
var arr = [10, 2, 88, 5];
arr.sort(function(a,b){return a - b;});
console.log(arr[arr.length - 1]) // 88
5. ES6数组的扩展运算符(...)
var arr = [10, 2, 88, 5];
console.log(Math.max(...arr)) // 88