zoukankan      html  css  js  c++  java
  • 取数组中最大值和最小值

    取数组中最大值

    可以先把思路理一下:

    • 将数组中第一个元素赋值给一个变量,并且把这个变量作为最大值;
    • 开始遍历数组,从第二个元素开始依次和第一个元素进行比较
    • 如果当前的元素大于当前的最大值,就把当前的元素值赋值给最大值
    • 移动到下一个元素,继续按前面一步操作
    • 当数组元素遍历结束时,这个变量存储的就是最大值

    代码如下:

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

    来看一个示例:

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

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

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

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

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

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

    取数组中最小值

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

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

    其他方法

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

    1 Array.prototype.max = function() {
    2     return this.reduce(function(preValue, curValue,index,array) {
    3         return preValue > curValue ? preValue : curValue;
    4     })
    5 }
    6 var arr = [1,45,23,3,6,2,7,234,56];
    7 arr.max(); // 234

    同样的也可以使用类似的方法实现arr.mix()方法,取出数组中的最小值:

    1 Array.prototype.min = function() {
    2     return this.reduce(function(preValue, curValue,index,array) {
    3         return preValue > curValue ? curValue : preValue;
    4     })
    5 }
    6 var arr = [1,45,23,3,6,2,7,234,56];
    7 arr.min(); // 1

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

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

    Math.max()

    Math.max()函数返回一组数中的最大值。

    1 Math.max(1,32,45,31,3442,4); // 3442
    2 Math.max(10, 20);   //  20
    3 Math.max(-10, -20); // -10
    4 Math.max(-10, 20);  //  20

    Math.min()

    Math.min()函数和Math.max()函数刚好相反,其会返回一组数中的最小值:

    1 Math.min(10,20); //10
    2 Math.min(-10,-20); //-20
    3 Math.min(-10,20); //-10
    4 Math.min(1,32,45,31,3442,4); //1

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

    Function.prototype.apply()让你可以使用提供的this与参数组与的数组来调用参数

     1 // 取出数组中最大值
     2 Array.max = function( array ){
     3     return Math.max.apply( Math, array );
     4 };
     5  // 取出数组中最小值
     6 Array.min = function( array ){
     7     return Math.min.apply( Math, array );
     8 };
     9 
    10 var arr = [1,45,23,3,6,2,7,234,56];
    11 Array.max(arr); // 234
    12 Array.min(arr); // 1

    Math对象也是一个对象,可以使用对象的字面量来写,如:

    1 Array.prototype.max = function () {
    2     return Math.max.apply({},this);
    3 }
    4 Array.prototype.min = function () {
    5     return Math.min.apply({},this);
    6 }
    7 var arr = [1,45,23,3,6,2,7,234,56];
    8 arr.max(); // 234
    9 arr.min(); // 1

    其实还有更简单的方法。基于ES2015的方法来实现此功能,是使用展开运算符

    1 Array.prototype.max = function () {
    2     return Math.max.apply({},this);
    3 }
    4 Array.prototype.min = function () {
    5     return Math.min.apply({},this);
    6 }
    7 var arr = [1,45,23,3,6,2,7,234,56];
    8 arr.max(); // 234
    9 arr.min(); // 1

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

    总结

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

    参考资料

  • 相关阅读:
    springboot 2.2.1默认跳到登录页
    Shiro 认证失败返回JSON
    【问题】:spring cloud sleuth日志组件冲突问题
    转载:springboot 配置logback日志,超详细
    Rancher探秘二:安装Rancher
    Rancher探秘一:初识Rancher
    Spring Cloud 微服务六:调用链跟踪Spring cloud sleuth +zipkin
    Spring Cloud 微服务五:Spring cloud gateway限流
    Spring Cloud 微服务四:熔断器Spring cloud hystrix
    chrome remoting/ chromoting 分析#1
  • 原文地址:https://www.cnblogs.com/jiechen/p/5521490.html
Copyright © 2011-2022 走看看