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

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) // 1Math.max(true, '2', null) // 2Math.max(1, undefined) // NaNMath.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))

二分法求数组最大最小_js-求数组的最大值和最小值相关推荐

  1. js寻找两个数组的差集_js求两个数组的交集|并集|差集|去重

    let a = [1,2,3], b= [2, 4, 5]; 1.差集 (a-b 差集:属于a但不属于b的集合)  a-b = [1,3] (b-a 差集:属于b但不属于a的集合)  b-a = [4 ...

  2. EXCEL数组公式求解一定条件下的最大值及最小值

    如图,求不同专题在不同来源渠道下的行号的最大值.行号的最小值. 解决办法,见红框函数.

  3. Visual StudioC#窗体应用程序,输入不定长度求平均值,最大值,最小值

    程序代码: using System; /*编写Test类,包含average方法.Max方法.Min方法,实现求数组中所有元素的平均值.最大值.最小值,在Main中调用方法并显示出来*/ names ...

  4. 取数组中最大值和最小值

    将数组中第一个元素赋值给一个变量,并且把这个变量作为最大值: 开始遍历数组,从第二个元素开始依次和第一个元素进行比较 如果当前的元素大于当前的最大值,就把当前的元素值赋值给最大值 移动到下一个元素,继 ...

  5. 二分法求数组最大最小_JavaScript之如何求数组的最大值和最小值

    上次给大家分享了从零事项jQuery的extend,今天跟大家分享下如何求数组的最大值和最小值. 取出数组中的最大值或者最小值是开发中常见的需求,但你能想出几种方法来实现这个需求呢? 1. Math. ...

  6. 求旋转数组的最小数字C++

    发现还是数组这种最简单的编码才适合我,遇到树,链表这些真的是一头雾水,自己也不知道怎么实现.言归正传,该篇文章介绍如何求旋转数组的最小值,求最大值可以适当改编即可. 什么是旋转数组呢,就是将一个数组的 ...

  7. 求旋转数组的最小元素

    (把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个排好序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个 ...

  8. 二维数组求最小值_05-最大子矩形-最大值减去最小值小于或等于num的子数组数量...

    年轻即出发... 简书:https://www.jianshu.com/u/7110a2ba6f9e 知乎:https://www.zhihu.com/people/zqtao23/posts Git ...

  9. 使用Math.max和Math.min求数组的最大值和最小值

    正常情况下,如果我们求数组的值,用到的就是for循环,如果在代码中经常求最大值和最小值的话,会显得代码很乱.所以,就考虑一中最简单的方法求最大值. 使用Math里面自带的max和min方法 funct ...

最新文章

  1. waf旁路oracle客户端,WAF Bypass数据库特性(Oracle探索篇)
  2. cosx的麦克劳林级数是多少_cosx泰勒展开
  3. rabbitMq自动创建队列
  4. C/C++:Windows编程—Inline Hook内联钩子(上)
  5. php ob缓存原理介绍
  6. 1,3+–二苯基胍行业调研报告 - 市场现状分析与发展前景预测
  7. 静态初始化--我的理解
  8. springmvc中常见的简单的文件上传和下载
  9. 轻松解决Tomcat启动慢的问题,只需一行代码
  10. html中闰年的计算方法,什么是闰年(怎么计算)
  11. C7N新增,保存,删除基础模板
  12. OGG12.1(LINUX) for 11G R2 RAC classical install 经典抽取模式单项同步配置OGG12.1
  13. 3D大屏制作方法论终于来了!快码
  14. 关闭Hyper-v虚拟服务
  15. This beta version of Typora is expired,please download and install a newe最新解决方案
  16. 卖书如何通过B站引流?方法用对后效果都不会太差
  17. 2022-2028全球及中国电子商务欺诈预防行业研究及十四五规划分析报告
  18. 小程序覆盖修改vant-ui的样式
  19. 三星s4 android8,三星公布Android 8.0更新手机名单 Galaxy S7起步
  20. Low Resource对话摘要论文阅读笔记

热门文章

  1. 创校史纪录!26岁女博导发顶刊
  2. 这么多两院院士竟然来自同一个家族!
  3. 平行驾驶与平行交通:从智能出行到智慧城市
  4. php imagick手册,PHP中使用Imagick实现各种图片效果实例
  5. Mysql中Drop删除用户的名字_mysql5.5 使用drop删除用户
  6. 原根(详解+代码实现+例题+快速求解一个数的原根)
  7. Spark提交 指定 kerberos 认证信息
  8. PCL库使用中遇到的一些问题及解决方法
  9. Databricks 企业版 SparkDelta Lake 引擎助力 Lakehouse 高效访问
  10. 工程师的灵魂拷问:你的密钥安全吗?