求数组最大或最小值的方法总结

2021-11-15  本文已影响0人  接下来的冬天

Math.max

JavaScript 提供了 Math.max 函数返回一组数中的最大值

用法:

Math.max([value1[,value2, ...]])

值得注意的是:

而我们需要分析的是:

如果任一参数不能被转换为数值,这就意味着如果参数可以被转换成数字,就是可以进行比较的,比如:

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
上一篇 下一篇

猜你喜欢

热点阅读