当前位置:   article > 正文

Array类型 | 六种算法求数组的最大值和最小值_数组查询最大值函数的array方法

数组查询最大值函数的array方法


算法1:利用prototype属性扩展max()和min()方法

//定义最大值方法
Array.prototype.max = function(){
    var max = this[0];//将第一个值设置为最大值
    var len = this.length;
    for(var i=1;i<len;i++){
        if(this[i] > max){
           max = this[i]
           }
    }
    return max;
}
//定义最小值方法
Array.prototype.min = function(){
    var min = this[0];//将第一个值设置为最小值
    var len = this.length;
    for(var i=1;i<len;i++){
        if(this[i] < min){
           min = this[i]
           }
    }
    return min;
}
var arr = [1,2,3,4,6,8,10];
console.log(arr.max());	//	10
console.log(arr.min());	//	1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

算法2:借助Math对象的min()函数和max()函数

//将min()函数和max()函数作为Array类型的静态函数
Array.max = function(arr){
    return Math.max.apply(Math,arr);
}
Array.min = function(arr){
    return Math.min.apply(Math,arr);
}
var arr1 = [1,2,3,4,6,7,8];
console.log(Array.max(arr1));
console.log(Array.min(arr1));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

算法3:链式调用(推荐)

Array.prototype.max = function(arr){
    return Math.max.apply(null,this);//apply()的第一个参数可为{},null, undefined表示当前执行环境的全局对象;
  								    //第二个参数this指向需要处理的数组
}
Array.prototype.min = function(arr){
    return Math.min.apply(null,this);
}
var arr2 = [1,2,3,4,6,7,8];
console.log(arr2.max());
console.log(arr2.min());
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

算法4:借助Array类型的reduce()函数

主要思想是reduce()函数不设置initialValue初始值,将数组的第一个元素直接作为回调函数的第一个参数,依次与后面的值进行比较。当需要找最大值时,每轮累加器返回当前比较中大的值;当需要找最小值时,每轮累加器返回当前比较中小的值

Array.prototype.max = function(arr){
    return this.reduce(function(preValue,curValue){
    //比较后返回大的值
        return preValue > curValue ? preValue : curValue ;
    });
};
Array.prototype.min = function(arr){
    return this.reduce(function(preValue,curValue){
     //比较后返回小的值
        return preValue > curValue ? curValue: preValue ;
    });
};
var arr3 = [1,2,3,4,5,6,7,8];
console.log(arr3.max());
console.log(arr3.min());

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

算法5:借助Array类型的sort()函数

主要思想是借助数组原生的sort()函数对数组进行排序,排序完成后首尾元素即是数组的最小、最大元素
默认的sort()函数在排序时是按照字母顺序排序的,数字都会按照字符串处理,例如数字11会被当作"11"处理,数字8会被当作"8"处理。在排序时是按照字符串的每一位进行比较的,因为"1"比"8"要小,所以"11"在排序时要比"8"小。直接利用sort()函数进行排序会得到如下结果:1, 11, 2, 3, 4, 5, 6, 7, 8。因此需要我们自定义排序函数

//自定义sortFn函数
var sortFn = function(a,b){
    return a - b;
}
var arr4 = [1,2,3,4,5,6,7,8];
var sortArr = arr4.sort(sortFn);
console.log(sortArr[0]);//获取最小值
console.log(sortArr[sortArr.length-1]);//获取最大值

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

算法6:借助ES6的扩展运算符

借助于ES6中增加的扩展运算符...,将数组直接通过Math.min()函数与Math.max()函数的调用,找出数组中的最大值和最小值。

var arr5 = [1,2,3,4,5,6,8,2];
console.log(Math.min(...arr5));   // 1
console.log(Math.max(...arr5));   // 8
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/598729
推荐阅读
  

闽ICP备14008679号