javaScript如何获取数组中的最大值/最小值方法

一、通过 排序 后的数组拿取首尾最大最小值

1.原始 for嵌套循环 进行排序

var arr = [54,23,58,44,76,12,39]
function sortArr1(arr){
   for(var i=0; i<arr.length-1;i++){
     for(var j=0;j<arr.length-i-1;j++){
       if(arr[j]>arr[j+1]){
           var temp=arr[j];
           arr[j]=arr[j+1];
           arr[j+1]=temp;
       }
     }
   }
   return arr
}
console.log(sortArr1(arr))
// ---输出1---  [12, 23, 39, 44, 54, 58, 76]  ---输出1--- //

2.使用 Array.prototype.sort() 方法排序

var arr = [54,23,58,44,76,12,39]
function sortArr2(arr){
   return arr.sort((a,b) => {
	  return a-b
   })
}
console.log(sortArr2(arr))
// ---输出2---  [12, 23, 39, 44, 54, 58, 76]  ---输出2--- //
二、通过 比较 数组值找出最大最小值

1.使用 for循环 比较找出最大最小值

var arr = [54,23,58,44,76,12,39]
function compareArr1(arr){
  var num=0;
   for(var i=0; i<arr.length; i++){
       if(arr[i]>num){
           num=arr[i];
       }
   }
   return num
}
console.log(compareArr1(arr))
// ---输出1---  76  ---输出1--- //

2.使用 Array.prototype.reduce 比较最大最小值

var arr = [54,23,58,44,76,12,39]
function compareArr2(arr){
	return arr.reduce(function(init,item){
	    return init >= item ? item : init
	})
}
console.log(compareArr2(arr))
// ---输出2---  12  ---输出2--- //
三、使用 Math.max()/Math.min() 找出数组中的最大最小值

JavaScript 提供了 Math.max 函数 返回一组数中的最大值,用法是:

Math.max([value1[,value2, ...]])

值得注意的是:

  1. 如果有任一参数不能被转换为数值,则结果为 NaN
  2. maxMath 的静态方法,所以应该像这样使用:Math.max(),而不是作为 Math 实例的方法 (简单的来说,就是不使用 new )
  3. 如果没有参数,则结果为 -Infinity (注意是负无穷大)

因此,如果给 Math.max 传一个非数值,结果是 NaN

var arr = [54,23,58,44,76,12,39]
Math.max(arr)  // NaN

1.使用 apply 更改为目标对象的this上下文指向

var arr = [54,23,58,44,76,12,39]
Math.max.apply(null,arr)  // 76
Math.min.apply(Math,arr)  // 12

题外话,apply目标对象传了null得到的指向是哪里?

① 首先传入的第一个参数都是改变函数当前上下文对象;
call/apply 区别在于传的参数不同,一个是已逗号分隔字符串,一个以数组形式。

居然得到的是 window,当前js运行环境的全局对象。
在这里插入图片描述
这其实在es5中就有解释的:传入 null/undefined 的时候将执行js全局对象浏览器中是window,其他环境是 global,这样就解释得通了
在这里插入图片描述
2.使用 es6扩展运算符 取代 arguments对象apply方法,获取未知参数个数情况下的参数集合

var arr = [54,23,58,44,76,12,39]
Math.max(...arr)  // 76
Math.min(...arr)  // 12
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值