Jamey's Jamey's
首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于

Jamey

首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于
  • 深入系列

  • 专题系列

    • 写在前面
    • JavaScript 专题之跟着 underscore 学防抖
    • JavaScript 专题之跟着 underscore 学节流
    • JavaScript 专题之数组去重
    • JavaScript 专题之类型判断(上)
    • JavaScript 专题之类型判断(下)
    • JavaScript 专题之深浅拷贝
    • JavaScript 专题之从零实现 jQuery 的 extend
    • JavaScript 专题之如何求数组的最大值和最小值
      • 📖. 前言
      • 一. Math.max
      • 一. 原始方法
      • 二. reduce
      • 三. 排序
      • 四. eval
      • 五. apply
      • 六. ES6 ...
    • JavaScript 专题之数组扁平化
    • JavaScript 专题之学 underscore 在数组中查找指定元素
    • JavaScript 专题之 jQuery 通用遍历方法 each 的实现
    • JavaScript 专题之如何判断两个对象相等
    • JavaScript 专题之函数柯里化
    • JavaScript 专题之偏函数
    • JavaScript 专题之惰性函数
    • JavaScript 专题之函数组合
    • JavaScript 专题之函数记忆
    • JavaScript 专题之递归
    • JavaScript 专题之乱序
    • JavaScript 专题之解读 v8 排序源码
  • underscore系列

  • ES6系列

  • 模块化

  • 正则表达式

  • 单元测试

  • 微前端

  • 实用函数

  • Rollup

  • 解决方案

  • 《JavaScript》笔记
  • 专题系列
Jamey
2021-10-26
目录

JavaScript 专题之如何求数组的最大值和最小值

# JavaScript 专题之如何求数组的最大值和最小值

# 📖. 前言

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

# 一. Math.max

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

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

值得注意的是:

  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
1
2
3
4
  1. 如果没有参数,则结果为 -Infinity,对应的,Math.min 函数,如果没有参数,则结果为 Infinity,所以:
var min = Math.min();
var max = Math.max();
console.log(min > max);
1
2
3

了解了 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);
1
2
3
4
5
6
7

# 二. 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));
1
2
3
4
5
6

# 三. 排序

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

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

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

# 四. eval

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

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

var max = eval("Math.max(" + arr + ")");
console.log(max);
1
2
3
4

# 五. apply

使用 apply 是另一种。

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

# 六. ES6 ...

使用 ES6 的扩展运算符:

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

有更多的方法欢迎留言哈~

#JavaScript 专题
上次更新: 2022/07/01, 17:34:19
JavaScript 专题之从零实现 jQuery 的 extend
JavaScript 专题之数组扁平化

← JavaScript 专题之从零实现 jQuery 的 extend JavaScript 专题之数组扁平化→

Theme by Vdoing | Copyright © 2017-2023 Jamey | blog 闽ICP备19022664号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式