使用JavaScript·求数组的最大值和最小值

前言  在数组中并没有提供 arr.max()arr.min()这样的方法。那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最大值和最小值的一些方法。
 
法一:其实利用 ECMAScript5的 ...展开运算符可以很简单的解决这个问题
var arr=[2,7,3,10,22,11];
Math.max(...arr); //44
Math.min(...arr); //2
 法二 : 对数组进行遍历
对于数组的遍历,有多种不同的方法,下面对各种方法进行比较:Array.prototype.max= function(){
 
     
Array.prototype.max=function(){
let max=this[0];
this.forEach(function(item,index){
if(item>max){
max=item;
}
});
return max;
}
var arr = [1,45,23,3,6,2,7,234,56,222,34444,9]; console.time("费时"); console.log(arr.max()); // 34444 console.timeEnd("费时"); // 费时:0.376ms
// ================================================ //
Array.prototype.max=function(){ let max=this[0]; this.map(function(item,index){ if(item>max){ max=item; } }); return max; } var arr = [1,45,23,3,6,2,7,234,56,222,34444,9]; console.time("费时"); console.log(arr.max()); // 34444 console.timeEnd("费时"); // 费时: 0.402ms

// ================================================= //
Array.prototype.max=function(){ let max=this[0]; for(var i=1;i<this.length;i++){ if(this[i]>max){ max=this[i]; } } return max; } var arr = [1,45,23,3,6,2,7,234,56,222,34444,9]; console.time("费时"); console.log(arr.max()); // 34444 console.timeEnd("费时"); // 费时: 0.522ms
  我们来看看如果数组中不全是数值的会是怎样的?
var arr = [1,45,23,3,6,2,7,234,56,'2345',5,'a',1000];
arr.max(); // "a"
['a',1000,'c'].max(); // "c"
[1000,'a'].max(); // 1000
  咦,结果好像不是我们想要的,经过测试,我觉得数值和字符的大小比较是一下的规则:
    ① 如果两个数都是数值的时候,按照普通的数值比较方法
    ② 如果两个数都是字符串,则两个字符串从高位逐位开始比较,根据ASCLL码的大小比较;
      英文字母>数字,小写字母>大写字母 
     【注】字符转ascii码:用charCodeAt();
  1. "A".charCodeAt(); // 65
    "a".charCodeAt(); // 97
    ③ 如果一个是字符串,一个是数值,则将数值转换为字符串,按照两个字符串的大小比较方法比较
 
法三: 还可以使用Array.prototype.reduce 方法进行遍历,使用此法,无需添加额外的 max 变量
Array.prototype.max=function(){

  return arr.reduce(function(prev,next){
    return prev>next?prev:next;
  });
}
var arr = [1,45,23,3,6,2,7,234,56,222,34444,9];
console.time("费时");
console.log(arr.max()); // 34444
console.timeEnd("费时"); // 费时:  0.389ms

求数组最小值的就不再多说了,同理易得~

 

总结

  上面求数组的最值最简单的还是法一,剩下的都是遍历数组,对于数组的遍历也要选择好方法,不同的遍历方法性能不同,其中 Array.prototype.map虽然使用起来优雅,但是实际性能并不会比forEach好,具体的还是示情况而定吧

转载于:https://www.cnblogs.com/kasmine/p/6417838.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值