js获取数字数组最大值的几种方式
原生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获取数字数组最大值的几种方式的更多相关文章
- js取数组最大值的四种方式
var arr = [7,2,0,-3,5];1.apply()应用某一对象的一个方法,用另一个对象替换当前对象 var max = Math.max.apply(null,arr);console. ...
- js 获取Array数组 最大值 最小值
https://stackoverflow.com/questions/1669190/find-the-min-max-element-of-an-array-in-javascript // 错误 ...
- js获取url參数值的两种方式具体解释
有个url例如以下: http://passport.csdn.net/account/login? from=http%3a%2f%2fwrite.blog.csdn.net%2fpostedit ...
- js 获取json数组里面数组的长度
作为一个前端页面开发者第一次处理json数据,遇到了‘js 获取json数组里面数组的长度’?竟然不知道 json没有.length属性(真是要嘲讽下自己),少壮不努力老大徒伤悲啊!以前都是去寻求男朋 ...
- CountUp.js – 让数字以非常有趣的动画方式显示
CountUp.js 无依赖的.轻量级的 JavaScript 类,可以用来快速创建以一种更有趣的动画方式显示数值数据.尽管它的名字叫 countUp,但其实可以在两个方向进行变化,这是根据你传递的 ...
- PHP如何实现数据类型转换(字符转数字,数字转字符)(三种方式)
PHP如何实现数据类型转换(字符转数字,数字转字符)(三种方式) 一.总结 一句话总结: 1.强制转换:(int) (bool) (float) (string) (array) (object) 2 ...
- 获取机器安装.NET版本的几种方式
当调查应用程序问题时,通常需要先确认目标机器所安装的 .NET Framework 的版本.可以通过如下方式来确认版本号: 通过控制面板安装程序查询 通过查询注册表获取版本信息 通过查看安装目录获取版 ...
- js关闭当前页面(窗口)的几种方式总结(转)
js关闭当前页面(窗口)的几种方式总结 1. 不带任何提示关闭窗口的js代码 代码如下 <a href="javascript:window.opener=null;windo ...
- Struts2中获取HttpServletRequest,HttpSession等的几种方式
转自:http://www.kaifajie.cn/struts/8944.html package com.log; import java.io.IOException; import java. ...
随机推荐
- Spring5源码,Spring Web中的处理程序执行链
一.什么是Spring中的处理程序执行链? 二.HandlerExecutionChain类 三.自定义处理程序执行链 Spring的DispatcherServlet假如缺少几个关键元素将无法分派请 ...
- form(form基础、标签渲染、错误显示 重置信息、form属性、局部钩子、全局钩子)
form基础 Django中的Form使用时一般有两种功能: 1.生成html标签 2.验证输入内容 要想使用django提供的form,要在views里导入form模块 from django im ...
- hbase伪分布式环境的搭建
一,实验环境: 1, ubuntu server 16.04 2, jdk,1.8 3, hadoop 2.7.4 伪分布式环境或者集群模式 4, hbase-1.2.6.tar.gz 二,环境的搭建 ...
- 浅谈OSI参考模型(七层模型)
很多人说"21世纪人类最伟大的发明就是计算机":正是如此,21世纪的今天,计算机正对我们的社会发展和生活起居产生着不可估量的影响:电脑,手机都能上网随时随地了解多彩的世界.但是有时 ...
- python--基础2 (数据类型及应用)
资源池 链接:https://pan.baidu.com/s/1OGq0GaVcAuYEk4F71v0RWw 提取码:h2sd python数据类型 字符串 列表 字典 数字(整数) 数字(浮点数) ...
- 37.Samba 文件共享服务1--配置共享资源
1.Samba 服务程序的主配置文件包括全局配置参数和区域配置参数.全局配置参数用于设置整体的资源共享环境,对里面的每一个独立的共享资源都有效.区域配置参数则用于设置单独的共享资源,且仅对该资源有效. ...
- HTTPS优化与证书
1.HTTPS性能优化 1.1 HTTPS性能损耗原因 前文讨论了HTTPS原理与优势:身份验证.信息加密与完整性校验等,且未对TCP和HTTP协议做任何修改.但通过增加新协议以实现更安全的通信必然需 ...
- HDU5739 Fantasia【点双连通分量 割点】
HDU5739 Fantasia 题意: 给出一张\(N\)个点的无向图\(G\),每个点都有权值\(w_i\),要求计算\(\sum_{i=1}^{N}i\cdot G_i % 1e9+7\) 其中 ...
- 关于KMP算法的理解
上次因为haipz组织的比赛中有道题必须用到KMP算法,因此赛后便了解了下它,在仔细拜读了孤~影神牛的文章之后有种茅塞顿开的感觉,再次ORZ. 附上链接http://www.cnblogs.com/y ...
- 【uva 1395】Slim Span(图论--最小生成树+结构体快速赋值 模版题)
题意:给一个N(N<=100)个点的联通图(无自环和平行边),求苗条度(最大边-最小边的值)尽量小的生成树. 解法:枚举+Kruskal.先从小到大排序边,枚举选择的最小的边. 1 #inclu ...