首先定义一个数组,并声明最大值为变量maxValue
,最小值为变量minValue
1 | let arr = [25, 62, 91, 78, 34, 62]; |
1 排序法
首先我们对数组进行排序,可以按照升序排序,也可以按照降序排序。排序之后的数组中的第一个和最后一个元素就是我们需要的最大值或最小值。
排序可以使用sort()
方法
1 | // 方法一:排序法 |
2 假设法
可以假设数组中的第一个值是最大值,然后拿这个最大值和数组中的其他元素逐一比较,如果后面的某一个值比假设的值还大,说明假设错了,我们把假设的值进行替换,将这个值赋假设为新的最大值。循环结束后,拿到的结果就是我们想要的。最小值反之。
1 | // 假设第一个数组元素就是数组中的最大值 |
3 使用Math
对象中的max/min
方法
Math.max()
函数返回一组数中的最大值,例如:
1 | console.log(Math.max(1, 3, 2)); // 3 |
但是这个函数并不接受数组作为参数,且这个函数也不是数组对象中的方法,无法通过数组直接调用。这里我们可以使用apply
来实现求数组中的最值,因为apply()
方法接收的函数参数刚好是以数组方式进行传入的。
1 | // 使用apply方法,可以直接将数组作用参数传入 |
一个小问题:
为什么通过apply
就可以实现数组求最值了呢?
看一下apply
的this
参数,上面代码中传递了一个null,也就是并没有将Math.max()
方法绑定到其他对象上。这里只涉及到了两点:
Math.max()
需要传入的是多个数值apply()
只需要把接收到的多个参数传递给Math.max()
,只不过接收的多个参数是以数组形式接收的,刚好可以把数组传入,从而实现数组求最值。在apply()
方法内部再将数组中的元素拆分成一个一个的参数值,传递给Math.max()
即可。
4 使用ES6的扩展运算符
扩展运算符可以展开数组,代替apply()
将数组转化成函数参数的需求。
例如:
1 | function sum(x, y, z) { |
那么正好可以使用这个运算符将数组展开,展开成多个数值,然后作为多个参数向Math.max()
传入。
1 | console.log('最大值为:', Math.max(...arr)); // 91 |
本文作者: CoderLeiShuo
本文链接:https://coderleishuo.github.io/lele/63385.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!