For 循环

一般关于实现数组的某种操作,可能最先想到的就是 for 循环吧!下面是它的实现。

let min = arr => {let greatest = arr[0]for (let i = 0; i < arr.length; i++) {if (greatest > arr[i]) {greatest = arr[i]}}return greatest
}let max = arr => {let greatest = 0for (let i = 0; i < arr.length; i++) {if (greatest < arr[i]) {greatest = arr[i]}}return greatest
}console.log(max(arr)) // 25
console.log(min(arr)) // 1

Math.min()/max()

内置函数 Math.max()Math.min() 可以分别返回一直数中的最大值和最小值,其可以接受任意数量的参数。

Math.max(25, 5, 15, 6, 9, 1, 3) // 25
Math.min(25, 5, 15, 6, 9, 1, 3) // 1

这很方便,但它不能直接用于数组。我们需要一些其他的方法来帮助我们使用它。

call/apply

Function.prototype.apply() 方法调用一个具有给定this值的函数,以及以一个数组的形式提供的参数。

Function.prototype.call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。

  • apply() 第二个参数传递 arr 数组,使用数组中的所有值作为函数的参数。
  • call() 第二个参数传递 arr 数组,并使用扩展运算符,将其展开作为其函数的参数。
let max = arr => Math.max.apply(null, arr)
let min = arr => Math.min.call(null, ...arr)console.log(max(arr)) // 25
console.log(min(arr)) // 1

扩展运算符

更为简单的方式是,直接使用 ES6 的扩展运算符(...)展开数组。

console.log(Math.max(...arr)) // 25
console.log(Math.min(...arr)) // 1

Array.prototype.sort()

使用 Array.prototype.sort 先对数组进行排序,在获取数组的第一个元素。

let arr = [25, 5, 15, 6, 9, 1, 3]let max = arr => arr.sort((a, b) => b - a)[0]
let min = arr => arr.sort((a, b) => a - b)[0]console.log(max(arr)) // 25
console.log(min(arr)) // 1

如果你还不熟,可以看看 如何在 JavaScript 中对对象数组进行排序?了解 sort() 的用法。

任意数量的最大值

从提供的数组返回 n 个最大元素。

  • 使用 Array.prototype.sort() 和扩展运算符(...)配合,创建数组的浅拷贝,并按降序排序。
  • 使用 Array.prototype.slice() 获取指定数量的元素。
  • 省略第二个参数 n,得到一个单元素数组。
  • 如果 n 大于或等于提供的数组长度,则返回原始数组(按降序排序)。
const maxN = (arr, n = 1) => [...arr].sort((a, b) => b - a).slice(0, n)maxN([25, 5, 15, 6, 9, 1, 3]) // [25]
maxN([25, 5, 15, 6, 9, 1, 3], 3) // [25, 15, 9]

任意数量的最小值

从提供的数组返回 n 个最小元素。

  • 使用 Array.prototype.sort() 和扩展运算符(...)配合,创建数组的浅拷贝,并按升序排序。
  • 使用 Array.prototype.slice() 获取指定数量的元素。
  • 省略第二个参数 n,得到一个单元素数组。
  • 如果 n 大于或等于提供的数组长度,则返回原始数组(按升序排序)。
const minN = (arr, n = 1) => [...arr].sort((a, b) => a - b).slice(0, n)minN([25, 5, 15, 6, 9, 1, 3]) // [1]
minN([25, 5, 15, 6, 9, 1, 3], 3) // [1, 3, 5]

这两个示例来自 30 seconds of code 的 maxN 和 minN

复杂情况 — 对象数组

对于更复杂的情况(即在对象数组中查找最小/最大值),您可能需要使用 Array.prototype.map() 等一些方法。

最小值

使用提供的函数将每个元素映射到一个值后,返回数组的最小值。

  • 使用 Array.prototype.map() 将每个元素映射到 fn 所返回的值。
  • 使用 Math.min() 获得的最小- 值。
const minBy = (arr, fn) =>Math.min(...arr.map(typeof fn === 'function' ? fn : val => val[fn]))minBy([{ n: 4 }, { id: 2 }, { id: 8 }, { id: 6 }], x => x.id) // 2
minBy([{ id: 4 }, { id: 2 }, { id: 8 }, { id: 6 }], 'id') // 2

最大值

使用提供的函数将每个元素映射到一个值后,返回数组的最大值。

  • 使用 Array.prototype.map() 将每个元素映射到 fn 所返回的值。
  • 使用 Math.max() 获取最大值。
const maxBy = (arr, fn) =>Math.max(...arr.map(typeof fn === 'function' ? fn : val => val[fn]))maxBy([{ id: 4 }, { id: 2 }, { id: 8 }, { id: 6 }], x => x.id) // 8
maxBy([{ id: 4 }, { id: 2 }, { id: 8 }, { id: 6 }], 'id') // 8

这两个示例来自 30 seconds of code 的 min-by 和 max-by


http://www.taodudu.cc/news/show-6421446.html

相关文章:

  • 取最大值
  • 最大值和最小值的差
  • 求最大值和最小值
  • 查找最大值
  • 最大值问题
  • RAID | 更新驱动
  • uniapp开发app使用AntV F6
  • 【Antv/Vue3】vue项目中使用antv/L7制作地图
  • antv 官方文档参考 ywy(基础)
  • AntV G6的相关使用总结
  • vue使用antv-G2
  • antv x6 连接桩
  • 【VUE3+AntV X6】 引入ANTV X6 的流程图编辑器应用(一)
  • 微信小程序antv使用详解
  • 数据可视化(Echarts、antv)
  • 了解AntV/x6
  • antv/g6基本使用教程
  • 使用 Vue3 重构 Vue2 项目(长文)
  • Vue3项目搭建学习笔记
  • [前端笔记037]vue2之vuex
  • 【vue2项目实战】---- 1.项目准备
  • Vue学习笔记(十一)
  • Vue项目学习(2)
  • vue3+vite+electron项目搭建
  • Vue整合SpringBoot项目实战之Vue+Element-Ui搭建前端项目
  • electron+vue3全家桶+vite项目搭建【八】集成mockjs模拟数据
  • 基于Vue2使用Vuex3
  • electron+vue3全家桶+vite项目搭建【九】集成vite-plugin-mock-server 模拟后端请求
  • Vue笔记(8) - 案例
  • vue实战: 第二部分

数组中的最大值/最小值相关推荐

  1. 寻找数组中 的最大值最小值

    最简单的方法就是N中的每个数分别和max,min比较,看似2N次比较,其实大于max的就不必和min比较,小于min的也不必和max比较,因此比较的次数不足2N次,程序如下: [cpp] view p ...

  2. 编程之美4:求数组中的最大值和最小值

    方法1:暴力方法 遍历一遍数组,比较2*N次求出最大值和最小值 方法2:改进方法 (破坏了原数组)             遍历一遍数组使得下标为偶数的元素较下标为奇数的元素大,再分别求出最大值和最小 ...

  3. Java 数组中找最大值和最小值

    题目描述 计算并输出一维数组中的最大值和最小值. 输入描述 输入一个具有8个数的一维数组 输出描述 输出该数组中的最大值和最小值 输入样例 19.8 12.3 45 67.6 23 15.98 2.5 ...

  4. 寻找数组中的最大值和最小值

    解法1. 我们可以吧数字中的最大值和最小值看成两个独立的问题分别求出数组中的最大值和最小值. 直接的方法就是扫描数字,找到最大数以及最小数. <span style="font-siz ...

  5. Java 数组 定义一个数组,获取数组中的最大值和最小值,奇数个数和偶数个数...

    /*** 定义一个数组,获取数组中的最大值和最小值 奇数个数和偶数个数* */ package com.xuyigang1234.chp01;public class Demo8 {public st ...

  6. Java编程定义一个数组,输出数组中的最大值与最小值

    package com.pzhu.demo;public class MaxMin {//Java编程定义一个数组,输出数组中的最大值和最小值public static void main(Strin ...

  7. Java定义一个数组,输出数组中的最大值和最小值

    题目 定义一个数组,输出数组中的最大值和最小值 public class TestArray1 {public static void main(String[] args) {int[] a = n ...

  8. java中定义一个数组,获取数组中的最大值和最小值

    思路 : 我们定义一个数组,再定义一个max变量 用来存在最大值  : 再定义一个min变量,用来存在最小值: 我们遍历数组,假如当前值大于max,就把当前值赋值给max; 假如当前值小于min,就把 ...

  9. 给定一个数组,输出这个数组中的最大值和最小值

    /*** @author LLJ* @time 2020-5-6 17点06分* @Description 给定一个数组,输出这个数组中的最大值和最小值*/ public class BigAndSm ...

最新文章

  1. Ubuntu 16.04安装双显卡驱动方法收集
  2. Framework启动过程浅析
  3. 《Pokemon Go》开发商明年将推出「哈利波特」题材AR游戏
  4. docker下载tomact
  5. 手把手maven的功能/安装/使用/idea集成
  6. 知识越分享,收获越多。
  7. stl之queue队列容器
  8. linux下给qt4安装QSerialPort
  9. Oracle 11g及PLSQL可视化界面的安装与使用(内附软件)
  10. iOS 开发仿网易云音乐歌词海报
  11. 解决android.view.AbsSavedState$1 cannot be cast to android.widget.CompoundButton$SavedState
  12. 一款好用的国产软件源代码缺陷分析平台 — CodeSense
  13. 基于Qt开发的游戏手柄小程序例子
  14. 如何使用C#调用淘宝网页自动搜索,翻页和点击商品
  15. 解决问题:Consider defining a bean of type ‘com.xxx.mapper.xxxMapper‘ in your configuration.
  16. Mysql工作原理介绍
  17. java网络编程实现一个聊天程序
  18. 剑指offer (From Leetcode) 汇总
  19. 32*4段 超低功耗LCD液晶显示驱动IC-VKL128 LQFP44,适用水表/传感器/热能表/压力表/测厚仪等,工作电流约7.5微安
  20. 安装sql server踩坑记【sql2000程序安装配置服务器失败】

热门文章

  1. android 创建aar包
  2. Echarts实现横轴数据节点不一致的绘制
  3. 汉白玉产地在哪里_汉白玉的产地 汉白玉是产自哪里的
  4. 2023年房地产融资模式研究报告
  5. excel两个表格按照某一数值匹配其他数据
  6. MARKETS AND MARKET LOGIC——The Market‘s Principles (6)_3
  7. NLP自然语言处理系列-音乐推荐系统实战 - 数据处理
  8. Java 集合深入理解(10):Deque 双端队列
  9. CRC16 - CRC64 的碰撞测试
  10. 网赚项目 - 陌陌引流,变现的步骤和方法