原生Math.max方法

Math.max 方法不能接收数组,可以使用ES6的...将数组打散

const arr = [111, 12, 111, 34, 2, 5, 76];
console.log(Math.max(...arr));

当然也可以用apply方法调用

console.log(Math.max.apply(null, arr));

遍历获取最大值

遍历数组,依次比较,保存较大的数,最终得到的就是最大值,这里使用forEach遍历

function max2(arr) {
let result = -Infinity;
arr.forEach((item) => {
if (item > result) {
result = item;
}
});
return result;
}
console.log(max2(arr));

利用排序获取最大值

将数组使用sort方法排序后,第一个元素或最后一个元素就是最大值,再用shift或者pop方法取出(由升序还是降序决定),值得注意的是这两个方法会修改元素组,可以使用slice方法复制一份数组再执行弹出元素操作

function max3(arr) {
return arr.sort((a, b) => a - b).slice().pop();
}
console.log(max3(arr));

使用filter排除小的值

使用filter函数依次取出<自身的元素,当取不出元素即返回的函数长度===零时,就取得了最大值,至于为什么用递归不用循环,用IIEF不用先声明后使用,嗯,就是单纯的不想

(function greater(arr, idx) {
const res = arr.filter(item => item > arr[idx]);
if (res.length === 1) {
console.log(res[0]);
return res[0];
}
greater(arr, idx + 1);
})(arr, 0);

使用every判断自己是否是最大值

使用every的原理和使用filter的原理类似,即当所有元素都<=本身的时候,本身就是最大值

(function greater(arr, idx) {
if (arr.every(item => item <= arr[idx])) {
console.log(arr[idx]);
return arr[idx];
}
greater(arr, idx + 1);
})(arr, 0);

使用递归模拟数组方法

和上面两个方法类似,只是内层用了用了递归和IIEF模拟了every

(function outer(arr, i) {
let flag = function inner(arr, j) {
if (arr[j] <= arr[i]) {
return false;
}
return arr.length < j + 1 ? inner(arr, j + 1) : true;
}(arr, 0);
if (flag) {
console.log(arr[i - 1]);
return arr[i - 1];
}
outer(arr, i + 1);
})(arr, 0);

友情提示

前面几种方法相对比较简洁,工作中比较常用,后边三种比较适合身子骨比较硬、头比较铁的码农仅供学习、娱乐,切莫当真(狗头保命)。

js获取数字数组最大值的几种方式的更多相关文章

  1. js取数组最大值的四种方式

    var arr = [7,2,0,-3,5];1.apply()应用某一对象的一个方法,用另一个对象替换当前对象 var max = Math.max.apply(null,arr);console. ...

  2. js 获取Array数组 最大值 最小值

    https://stackoverflow.com/questions/1669190/find-the-min-max-element-of-an-array-in-javascript // 错误 ...

  3. js获取url參数值的两种方式具体解释

    有个url例如以下: http://passport.csdn.net/account/login? from=http%3a%2f%2fwrite.blog.csdn.net%2fpostedit ...

  4. js 获取json数组里面数组的长度

    作为一个前端页面开发者第一次处理json数据,遇到了‘js 获取json数组里面数组的长度’?竟然不知道 json没有.length属性(真是要嘲讽下自己),少壮不努力老大徒伤悲啊!以前都是去寻求男朋 ...

  5. CountUp.js – 让数字以非常有趣的动画方式显示

    CountUp.js 无依赖的.轻量级的 JavaScript 类,可以用来快速创建以一种更有趣的动画方式显示数值数据.尽管它的名字叫 countUp,但其实可以在两个方向进行变化,这是根据你传递的 ...

  6. PHP如何实现数据类型转换(字符转数字,数字转字符)(三种方式)

    PHP如何实现数据类型转换(字符转数字,数字转字符)(三种方式) 一.总结 一句话总结: 1.强制转换:(int) (bool) (float) (string) (array) (object) 2 ...

  7. 获取机器安装.NET版本的几种方式

    当调查应用程序问题时,通常需要先确认目标机器所安装的 .NET Framework 的版本.可以通过如下方式来确认版本号: 通过控制面板安装程序查询 通过查询注册表获取版本信息 通过查看安装目录获取版 ...

  8. js关闭当前页面(窗口)的几种方式总结(转)

    js关闭当前页面(窗口)的几种方式总结     1. 不带任何提示关闭窗口的js代码 代码如下 <a href="javascript:window.opener=null;windo ...

  9. Struts2中获取HttpServletRequest,HttpSession等的几种方式

    转自:http://www.kaifajie.cn/struts/8944.html package com.log; import java.io.IOException; import java. ...

随机推荐

  1. python ---线程,进程,协程

    本章内容 线程 进程 协程 线程是最小的调度单位 进程是最小的管理单元 线程 多线程的特点: 线程的并发是利用cpu上下文切换 多线程的执行的顺序是无序的 多线程共享全局变量 线程是继承在进程里的,没 ...

  2. samba 、 FTP 、 lrzsz工具

    samba Samba是一个实现不同操作系统(Windows.Linux.UNIX)之间文件共享和打印机共享的一种SMB协议的免费软件:linux与linux之间共享用NFS:samba基于cs架构: ...

  3. linux系统rpm和yum软件包管理

    软件安装方式总结 安装软件方式有如下几种: 方式1:编译安装 将源码程序按照需求进行先编译,后安装 缺点:装过程复杂,而且很慢 优点:安装过程可控,真正的按需求进行安装(安装位置.安装的模块都可以选择 ...

  4. Linux系统对文件及目录的权限管理(chmod、chown)

    本文命令: 4 5 6 ls -l chmod chown 1.身份介绍 在linux系统中,对文件或目录来说访问者的身份有三种: ①.属主用户,拥有者(owner)文件的创建者 ②.属组用户,和文件 ...

  5. zabbix管理员设置

    1.认证 2.用户组和用户

  6. python+selenium+bs4爬取百度文库内文字 && selenium 元素可以定位到,但是无法点击问题 && pycharm多行缩进、左移

    先说一下可能用到的一些python知识 一.python中使用的是unicode编码, 而日常文本使用各类编码如:gbk utf-8 等等所以使用python进行文字读写操作时候经常会出现各种错误, ...

  7. Codeforces Round #575 (Div. 3) B. Odd Sum Segments 、C Robot Breakout

    传送门 B题题意: 给你n个数,让你把这n个数分成k个段(不能随意调动元素位置).你需要保证这k个段里面所有元素加起来的和是一个奇数.问可不可以这样划分成功.如果可以打印YES,之后打印出来是从哪里开 ...

  8. python爬虫下载小视频和小说(基础)

    下载视频: 1 from bs4 import BeautifulSoup 2 import requests 3 import re 4 import urllib 5 6 7 def callba ...

  9. 同时拿到BATJMD的Offer是怎样的一种体验?

    写在前面 又到了收割Offer的季节,你准备好了吗?曾经的我,横扫各个大厂的Offer.还是那句话:进大厂临时抱佛脚是肯定不行的,一定要注重平时的总结和积累,多思考,多积累,多总结,多复盘,将工作经历 ...

  10. Cobbler服务部署

    1.安装epel源 yum -y install epel-release 2.安装cobbler环境所需的包 yum install -y httpd dhcp xinetd tftp cobble ...