使用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好,具体的还是示情况而定吧

时间: 2024-12-11 19:47:31

使用JavaScript·求数组的最大值和最小值的相关文章

求数组的最大值和最小值

求数组的最大最小值,可以遍历一遍数组,然后分别记录最大值和最小值,这种方法需要的比较次数为2N次.如果想要减少比较次数,可以采用的方法是遍历数组,然后比较相邻元素,把相邻元素的较大值放在后面,较小的放在前面.在从较大值中选取最大值即为整个数组的最大值,从较小值中选取最小值即为整个数组的最小值.这时,需要的比较次数为1.5*N次. void findmaxmin(int a[],int n) { if(a==NULL||n<0) return ; int i=0; int maxe=0x80000

如何求数组的最大值和最小值

前言 取出数组中的最大值或者最小值是开发中常见的需求,但你能想出几种方法来实现这个需求呢? Math.max JavaScript 提供了 Math.max 函数返回一组数中的最大值,用法是: Math.max([value1[,value2, ...]]) 值得注意的是: 如果有任一参数不能被转换为数值,则结果为 NaN. max 是 Math 的静态方法,所以应该像这样使用:Math.max(),而不是作为 Math 实例的方法 (简单的来说,就是不使用 new ) 如果没有参数,则结果为 

求数组里面最大值,最小值

有些时候,我们需要求出一个数组里面的最大值,最小值. 先说最大值: //求数组里面的最大值 let arr=[2,5,8,9,3,50,1]; function maxNum(){ let max=arr[0]; //假如第一项为最大值 for(let i=1;i<arr.length;i++){ //将数据里面的其他项依次和第一项进行比较. if(arr[i]>max){ //只要找到数组里面的某一项大于我们之前设定的最大项,就把他们的顺序换掉 max=arr[i]; } } return

用java script 求数组的最大值、最小值、和、平均数

let readline = require(`readline-sync`); console.log(`请输入数组的长度`); let long = ~~readline.question(``); let arr = []; let sum = 0; let average = 0; for (let i = 0; i < long; i++) { console.log(`请输入第` + (i + 1) + `项的值:`); arr[i] = parseFloat(readline.qu

求数组中最大值,最小值

Array.prototype.max = function(){   //最大值 return Math.max.apply({},this)} Array.prototype.min = function(){   //最小值 return Math.min.apply({},this)} var myMax = [1,2,3].max()// => 3var myMin = [1,2,3].min()// => 1 console.log(myMin,myMax); var _getMi

分治法求数组的最大值最小值

实现求数组的最大值最小值,蛮力法要容易的多.本着重在体验分治法的思想的原则: 1 int main(void) 2 { 3 void Maxmin(int a[],int low,int high,int maxmin[2]); 4 int a[10],maxmin[2]; 5 6 printf("Enter 10 integer numbers:\n"); 7 for(int i=0;i<10;i++) 8 scanf("%d",a+i); 9 10 Max

java实现求一个数组里最大值和最小值之前缺省的数的算法

问题描述: 求一个数组里最大值和最小值之间缺省的数,例如 int arrDemo = {1, 3, 7};  那么就要输出最小值1和最大值7之间缺少的数字2,4,5,6 代码如下,有更好的思路欢迎大家在评论区留言讨论 1 package test; 2 3 public class Test { 4 5 static int[] array = { 6 -10,0,3,3,9 7 }; 8 9 private static void printEmptyItems(int[] array) {

获取数组中最大值和最小值

var ary = [12,23,23,4,4,12,4,141,4]; 1.利用obj存储 var min = max= null; var obj = {}; for(var i=0;i<ary.length;i++){ var cur = ary[i]; obj[cur]= cur; } var count = 0 ; for(var key in obj){ count++; if(count===1){ min = key; } max = key; } console.log(min

求数组的最大值和次大值

#include <stdio.h> #include <stdlib.h> /* 求数组的最大值和次大值. */ int main() { int n; while (printf("Please input n:\n"),fflush(stdin), scanf("%d", &n) != EOF){ if (n < 2){ printf("Please input a bigger number.\n")