html删除数组的最大最小值,JavaScript学习笔记:取数组中最大值和最小值_html/css_WEB-ITnose...

5268f80b9b1e01f982625ef6fac83ca1.png

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

取数组中最大值

可以先把思路理一下: 将数组中第一个元素赋值给一个变量,并且把这个变量作为最大值;

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

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

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

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

代码如下: Array.prototype.max = function () { // 将数组第一个元素的值赋给max var max = this[0]; // 使用for 循环从数组第一个值开始做遍历 for (var i = 1; i < this.length; i++) { // 如果元素当前值大于max,就把这个当前值赋值给max if (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

同样的也可以使用类似的方法实现 arr.mix() 方法,取出数组中的最小值: Array.prototype.min = function() { return this.reduce(function(preValue, curValue,index,array) { return preValue > curValue ? curValue : preValue; })}var arr = [1,45,23,3,6,2,7,234,56];arr.min(); // 1

内置函数 Math.max() 和 Math.min() 方法

对于纯数字数组,可以使用JavaScript中的内置函数 Math.max() 和 Math.min() 方法。使用这两个内置函数可以分别找出数组中的最大值和最上值。在使用这两种内置函数取出数组最大和最小值之前,先学习一下 Math.max() 和 Math.min() 两个函数。

Math.max()

Math.max() 函数返回一组数中的最大值。 Math.max(1,32,45,31,3442,4); // 3442Math.max(10, 20); // 20Math.max(-10, -20); // -10Math.max(-10, 20); // 20

Math.min()

Math.min() 函数和 Math.max() 函数刚好相反,其会返回一组数中的最小值: Math.min(10,20); //10Math.min(-10,-20); //-20Math.min(-10,20); //-10Math.min(1,32,45,31,3442,4); //1

这些函数如果没有参数,则结果为 -Infinity ;如果有任一参数不能被转换为数值,则结果为 NaN 。最主要的是这两个函数对于数字组成的数组是不能直接使用的。但是,这有一些类似地方法。

Function.prototype.apply()让你可以使用提供的this与参数组与的数组来调用参数。 // 取出数组中最大值Array.max = function( array ){ return Math.max.apply( Math, array );}; // 取出数组中最小值Array.min = function( array ){ return Math.min.apply( Math, array );};var arr = [1,45,23,3,6,2,7,234,56];Array.max(arr); // 234Array.min(arr); // 1

Math 对象也是一个对象,可以使用对象的字面量来写,如: Array.prototype.max = function () { return Math.max.apply({},this);}Array.prototype.min = function () { return Math.min.apply({},this);}var arr = [1,45,23,3,6,2,7,234,56];arr.max(); // 234arr.min(); // 1

其实还有更简单的方法。基于ES2015的方法来实现此功能,是使用 展开运算符 : var numbers = [1, 2, 3, 4];Math.max(...numbers) // 4Math.min(...numbers) // 1

此运算符使数组中的值在函数调用的位置展开。

总结

这篇文章整理了几个从数组中取出最大值和最小值的方法。这几个方法都只是会对于数字数组,而对于数组中包含其他数据类型时,如何只取出最大的数值和最小的数值(如果您知道如何实现,还望指点迷津)。而这几种方法当中,使用JavaScript的内置函数 Math.max() 和 Math.min() 配合 Function.prototype.apply() 可以轻松取出数组中的最大值和最小值。当然最最简单的要当数ES2015中使用展示运算符的方法。如果大家还有更好的方案,希望能在下面的评论中与我们一起分享。

参考资料 数组取最大值与最小值

JavaScript: min & max Array values?

计算数组中的最大值/最小值

初学者学习笔记,如有不对,还希望高手指点。如有造成误解,还希望多多谅解。

大漠

常用昵称“大漠”,W3CPlus创始人,目前就职于手淘。中国Drupal社区核心成员之一。对HTML5、CSS3和Sass等前端脚本语言有非常深入的认识和丰富的实践经验,尤其专注对CSS3的研究,是国内最早研究和使用CSS3技术的一批人。CSS3、Sass和Drupal中国布道者。2014年出版《 图解CSS3:核心技术与案例实战 》。

1428d0e076c3959ab11d28a39bc84fab.png

5268f80b9b1e01f982625ef6fac83ca1.png

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值