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

前言

取出数组中的最大值或者最小值是开发中常见的需求,但你能想出几种方法来实现这个需求呢?

Math.max

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

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

值得注意的是:

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

而我们需要分析的是:

1.如果任一参数不能被转换为数值,这就意味着如果参数可以被转换成数字,就是可以进行比较的,比如:

Math.max(true, 0) // 1
Math.max(true, ‘2‘, null) // 2
Math.max(1, undefined) // NaN
Math.max(1, {}) // NaN

2.如果没有参数,则结果为 -Infinity,对应的,Math.min 函数,如果没有参数,则结果为 Infinity,所以:

var min = Math.min();
var max = Math.max();
console.log(min > max);

了解了 Math.max 方法,我们以求数组最大值的为例,思考有哪些方法可以实现这个需求。

原始方法

最最原始的方法,莫过于循环遍历一遍:

var arr = [6, 4, 1, 8, 2, 11, 23];

var result = arr[0];
for (var i = 1; i < arr.length; i++) {
    result =  Math.max(result, arr[i]);
}
console.log(result);

reduce

既然是通过遍历数组求出一个最终值,那么我们就可以使用 reduce 方法:

var arr = [6, 4, 1, 8, 2, 11, 23];

function max(prev, next) {
    return Math.max(prev, next);
}
console.log(arr.reduce(max));

排序

如果我们先对数组进行一次排序,那么最大值就是最后一个值:

var arr = [6, 4, 1, 8, 2, 11, 23];

arr.sort(function(a,b){return a - b;});
console.log(arr[arr.length - 1])

eval

Math.max 支持传多个参数来进行比较,那么我们如何将一个数组转换成参数传进 Math.max 函数呢?eval 便是一种

var arr = [6, 4, 1, 8, 2, 11, 23];

var max = eval("Math.max(" + arr + ")");
console.log(max)

apply

使用 apply 是另一种。

var arr = [6, 4, 1, 8, 2, 11, 23];
console.log(Math.max.apply(null, arr))

ES6 ...

使用 ES6 的扩展运算符:

var arr = [6, 4, 1, 8, 2, 11, 23];
console.log(Math.max(...arr))
时间: 2024-11-06 13:20:53

如何求数组的最大值和最小值的相关文章

使用JavaScript&#183;求数组的最大值和最小值

前言  在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最大值和最小值的一些方法. 法一:其实利用 ECMAScript5的 ...展开运算符可以很简单的解决这个问题 var arr=[2,7,3,10,22,11]; Math.max(...arr); //44 Math.min(...arr); //2  法二 : 对数组进行遍历 对于数组的遍历,有多种不同的方法,下面对各种方法进行比较:Arr

求数组的最大值和最小值

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

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

有些时候,我们需要求出一个数组里面的最大值,最小值. 先说最大值: //求数组里面的最大值 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")