数组中的最大值/最小值
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实战: 第二部分
数组中的最大值/最小值相关推荐
- 寻找数组中 的最大值最小值
最简单的方法就是N中的每个数分别和max,min比较,看似2N次比较,其实大于max的就不必和min比较,小于min的也不必和max比较,因此比较的次数不足2N次,程序如下: [cpp] view p ...
- 编程之美4:求数组中的最大值和最小值
方法1:暴力方法 遍历一遍数组,比较2*N次求出最大值和最小值 方法2:改进方法 (破坏了原数组) 遍历一遍数组使得下标为偶数的元素较下标为奇数的元素大,再分别求出最大值和最小 ...
- Java 数组中找最大值和最小值
题目描述 计算并输出一维数组中的最大值和最小值. 输入描述 输入一个具有8个数的一维数组 输出描述 输出该数组中的最大值和最小值 输入样例 19.8 12.3 45 67.6 23 15.98 2.5 ...
- 寻找数组中的最大值和最小值
解法1. 我们可以吧数字中的最大值和最小值看成两个独立的问题分别求出数组中的最大值和最小值. 直接的方法就是扫描数字,找到最大数以及最小数. <span style="font-siz ...
- Java 数组 定义一个数组,获取数组中的最大值和最小值,奇数个数和偶数个数...
/*** 定义一个数组,获取数组中的最大值和最小值 奇数个数和偶数个数* */ package com.xuyigang1234.chp01;public class Demo8 {public st ...
- Java编程定义一个数组,输出数组中的最大值与最小值
package com.pzhu.demo;public class MaxMin {//Java编程定义一个数组,输出数组中的最大值和最小值public static void main(Strin ...
- Java定义一个数组,输出数组中的最大值和最小值
题目 定义一个数组,输出数组中的最大值和最小值 public class TestArray1 {public static void main(String[] args) {int[] a = n ...
- java中定义一个数组,获取数组中的最大值和最小值
思路 : 我们定义一个数组,再定义一个max变量 用来存在最大值 : 再定义一个min变量,用来存在最小值: 我们遍历数组,假如当前值大于max,就把当前值赋值给max; 假如当前值小于min,就把 ...
- 给定一个数组,输出这个数组中的最大值和最小值
/*** @author LLJ* @time 2020-5-6 17点06分* @Description 给定一个数组,输出这个数组中的最大值和最小值*/ public class BigAndSm ...
最新文章
- Nat Commun:宏基因组学提示曙古菌门的代谢和进化(中大李文均组)
- 【DIY】自己动手更换热水器镁棒,保养电加热热水器注意事项,电热水器镁棒多久更换一次实际数据参考...
- 关于asp.net中链接数据库的问题
- 计算机课程设计结业感言,课程设计感言
- 个人周报20200420
- mysql主库从库binlog_MySQL主库主动推送binlog到从库
- ux和ui_设计社交餐厅策展应用程序— UX / UI案例研究
- JS实现滚动监听以及滑动到顶部
- Linux系统开发9 线程同步
- python中复制n次字符串_Python正则表达式,如何将字符串匹配n次 - python
- c++primer 第2章 书上例子 资料截图等
- 您可能(或可能不)知道的5条便捷的Transact-SQL技巧
- 【转载】C/C++预处理指令
- Equivalent String
- 反编译那些事儿(四)—序列化问题
- 常见的浏览器与内核你知道都有哪些吗?
- python批量删缩进_吾爱破解新出利器 : 批量重命名工具
- NI LabVIEW 2018 DAQmx定时属性节点 缺失部分属性的问题 解决方案
- SpringBoot 项目@Value 注解取不到值
- linux如何脚本监控tps,对Linux进行详细的性能监控的方法