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. ...
随机推荐
- 使用Docker Compose编排Spring Cloud微服务
文章目录 微服务构建实例 简化Compose的编写 编排高可用的Eureka Server 编排高可用Spring Cloud微服务集群及动态伸缩 微服务项目名称 项目微服务中的角色 microser ...
- java架构《并发线程基础一》
1.实现线程常见的两种的方式 : 1:继承extends Thread 2:实现new Runnable 实现其run方法 2.线程安全 结论: 当多个线程访问某一个类(对象或方法)时,这个对象 ...
- POE供电
1.定位:POE (Power Over Ethernet)指的是在现有的以太网Cat.5布线基础架构不作任何改动的情况下,在为一些基于IP的终端(如IP电话机.无线局域网接入点AP.网络摄像机等)传 ...
- cassandra权威指南读书笔记--监控&维护
cassandra SLF4J API记录日志,具体采用Logback实现.在终端启动cassandra时,可以向程序输入-f,就能在终端看到这个输出.Java Mangement Extension ...
- 2019 Multi-University Training Contest 7 Kejin Player(期望)
题意:给定在当前等级升级所需要的花费 每次升级可能会失败并且掉级 然后q次询问从l到r级花费的期望 思路:对于单次升级的期望 我们可以列出方程: 所以我们可以统计一下前缀和 每次询问O1回答 #inc ...
- hdu 4738 Caocao's Bridges(割边)
题目链接 用tarjan求桥上的最小权值 #include<bits/stdc++.h> #define ll long long int using namespace std; inl ...
- Codeforces Round #613 (Div. 2) C. Fadi and LCM(LCM & GCD)
题意: LCM(a, b) = X,求 max(a, b) 的最小值. 思路: a, b 只可能存在于 X 的因子中,枚举即可. #include <bits/stdc++.h> usin ...
- K - Japan(线段树)
Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built for the venue. Jap ...
- 【ybt金牌导航1-2-5】【luogu P3287】优美玉米 / 方伯伯的玉米田
优美玉米 / 方伯伯的玉米田 题目链接:ybt金牌导航1-2-5 / luogu P3287 题目大意 有一个数组,你可以每次给一个区间里面的值加一,要你使得最后剩下的最长单调不下降子序列最长. 思路 ...
- github gist 无法访问
转自这里 以管理员身份在hosts文件: Windows: C:\Windows\System32\drivers\etc Ubuntu: /etc/hosts 添加: 192.30.253.118 ...