首页 > 语言 > JavaScript > 正文

JavaScript学习笔记之取数组中最大值和最小值

2024-05-06 14:59:56
字体:
来源:转载
供稿:网友

推荐阅读:JavaScript学习笔记之数组的增、删、改、查

JavaScript学习笔记之数组求和方法

JavaScript学习笔记之数组随机排序

在实际业务中有的时候要取出数组中的最大值或最小值。但在数组中并没有提供arr.max()和arr.min()这样的方法。那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最大值和最小值的一些方法。

取数组中最大值

可以先把思路理一下:

将数组中第一个元素赋值给一个变量,并且把这个变量作为最大值;

开始遍历数组,从第二个元素开始依次和第一个元素进行比较

如果当前的元素大于当前的最大值,就把当前的元素值赋值给最大值

移动到下一个元素,继续按前面一步操作

当数组元素遍历结束时,这个变量存储的就是最大值

代码如下:

Array.prototype.max = function () {// 将数组第一个元素的值赋给maxvar max = this[0];// 使用for 循环从数组第一个值开始做遍历for (var i = 1; i < this.length; i++) {// 如果元素当前值大于max,就把这个当前值赋值给maxif (this[i] > max) {max = this[i];}}// 返回最大的值return max;}

来看一个示例:

var arr = [1,45,23,3,6,2,7,234,56];arr.max(); // 234

上面的示例,数组中都是数值,那么如果数组中不全是数值会是一个什么样的效果呢?来测试一下先:

var arr = [1,45,23,3,6,2,7,234,56,'2345','a','c'];arr.max(); // 'c'

这并不是我们想要的结果吧。(此处跪求解决方案)

通过前段时间的学习,都知道for循环性能要比forEach()差,那可以将上面的方法改成forEach()方法:

Array.prototype.max = function (){var max = this[0];this.forEach (function(ele,index,arr){if(ele > max) {max = ele;}})return max;}var arr = [1,45,23,3,6,2,7,234,56];arr.max(); // 234

取数组中最小值

类似取最大值的思路一样,我们可以很轻松的实现arr.min()方法,取出数组中的最小值:

Array.prototype.min = function () {var min = this[0];this.forEach(function(ele, index,arr) {if(ele < min) {min = ele;}})return min;}var arr = [1,45,23,3,6,2,7,234,56];arr.min(); // 1

其他方法

除了上面的方案,还可以有其他方法,比如使用数组的reduce()方法。回忆前面的学过的知识,reduce()方法可以接收一个回调函数callbackfn,可以在这个回调函数中拿数组中的初始值(preValue)与数组中当前被处理的数组项(curValue)做比较,如果preValue大于curValue值返回preValue,反之返回curValue值,依此类推取出数组中最大值:

Array.prototype.max = function() {return this.reduce(function(preValue, curValue,index,array) {return preValue > curValue ? preValue : curValue;})}var arr = [1,45,23,3,6,2,7,234,56];arr.max(); // 234            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选