JS求Number类型数组中最大元素方法


Posted in Javascript onApril 08, 2018

如何使用JS,在一个Number类型的数组里,查找最大(或最小)数呢?

以下介绍四个方法。

1. 不使用任何库函数

代码如下:

function findMax1 (arr) {
  let result = 0;
  if (Array.isArray(arr)) {
    for (let i = 0; i < arr.length; i++) {
      result = arr[i] > result ? arr[i] : result;
    }
    
    return result;
  } else {
    console.error('The parameter arr is not an array');
    return;
  }
}

解释:

利用一个变量result来存储最大值。遍历待查找的数组,如果当前遍历的元素大于result,就把这个元素赋值给result。

2. 利用Array.reduce()

代码如下:

function findMax2 (arr) {
  let result = 0;
  if (Array.isArray(arr)) {
    result = arr.reduce((a, b) => {
      return a > b ? a : b;
    }, 0);
    
    return result;
  } else {
    console.error('The parameter arr is not an array');
    return;
  }
}

解释:

reduce方法就是通过一个函数,针对一个累加器(accumulator)和数组中的每一个元素,将一个数组最终减少到一个值。

reduce接受两个参数:

第一个是callback,就是那个前面提到的那个函数。它有四个参数:

  1. accumulator:累加器,它是上次运行callback的结果。如果提供了initialValue,那么第一次就是initialValue;
  2. currentValue:当前遍历的数组的元素;
  3. currentIndex:当前遍历的数组的元素的index,从0开始。如果提供了initialValue,那就从1开始;
  4. array:当前应用reduce的数组。

第二个是initialValue,是一个初值,作为第一次运行callback函数的第一个实参。这个是可选的。这里要注意一下,如果这个参数不提供,并且应用在一个空数组上,是会报错的。

那么上面代码的意思就是,每次遍历数组进行比较,大的就留下来,即accumulator,并将其用作下一次和数组元素的比较。最后只留下这一个值,即最大值。

3. 利用Apply和Math.max()

代码如下:

function findMax3 (arr) {
  let result = 0;
  if (Array.isArray(arr)) {
    result = Math.max.apply(null, arr);
    
    return result;
  } else {
    console.error('The parameter arr is not an array');
    return;
  }
}

解释:

apply解释稍显复杂,不作进一步的解释。

它接受两个参数,第一个是thisArg,第二个是argsArray。两个都是可选的。此处简单来说,就是使用一个函数时,参数以数组的方式传递进去。

4. 只用Math.max()

代码如下:

function findMax4 (arr) {
  let result = 0;
  if (Array.isArray(arr)) {
    result = Math.max(...arr);
    
    return result;
  } else {
    console.error('The parameter arr is not an array');
    return;
  }
}

解释:

基于上一个解法的思路,在ES6中,有一个扩展运算符(...),可以将一个数组中的元素拆出来,组成一个用逗号分隔的序列。刚好满足Math.max()函数的需求。

在给大家介绍一下JS之number、Math和数组的相关知识点

1、Number对象。

创建Number对象的方式:

方式1:

var 变量= new Number(数字)

方式2:

var 变量 = 数字;

常用的方法:

toString() 把数字转换成指定进制形式的字符串。(输入数字几,就转换为几, number.toString(2))

toFixed() 指定保留小数位,而且还带四舍五入的功能。

2、Math

Math对象常用的方法:

ceil 向上取整

floor() 向下取整

random() 随机数方法 // 产生的伪随机数介于 0 和 1 之间(含 0,不含 1),

round 四舍五入

3、Array数组对象:

创建数组的方式1:

var 变量名 = new Array(); 创建一个长度为0的数组。

方式2:

var 变量名= new Array(长度) 创建一个指定长度的数组对象。

方式3:

var 变量名 = new Array("元素1","元素2"...); 给数组指定元素创建数组 的对象。

方式4:

var 变量名 = ["元素1","元素2"...];

数组要注意的细节:

1. 在javascript中数组的长度是可以发生变化的。

var arr = new Array(); //创建了一个长度为0的数组对象。
arr[100] = 10;
document.write("arr长度:"+arr.length+"<br/>");
var arr2 = new Array("狗娃","狗剩","铁蛋");
arr2 = ["狗娃","狗剩","铁蛋","张三"];
document.write("arr2长度:"+arr2.length+"<br/>");

3.1数字的方法

a、concat把arr1与arr2的数组元素组成一个新的数组返回。
arr1 = arr1.concat(arr2);

b、join使用指定的分隔符把数组中的元素拼装成一个字符串返回。

var elements = arr1.join(",");

c、pop :移除数组中的最后一个元素并返回该元素。

d、push:将新元素添加到一个数组中,并返回数组的新长度值。

arr1.push("你好");

e、reverse(); 翻转数组的元素

f、slice指定数组 的开始索引值与结束索引值截取数组的元素,并且返回子数组。(包头不包尾)

var subArr = arr1.slice(1,2);

g、sort排序,排序的时候一定要传入排序的方法。(不传时默认是按照ASCII表排列)

arr1 = [19,1,20,5];
arr1.sort(sortNumber); //排序,排序的时候一定要传入排序的方法。
function sortNumber(num1,num2){ 
return num1-num2;
}

h、splice第一个参数是开始删除元素的 索引值, 第二参数是删除元素的个数,往后的数据就是插入的元素(也可以不写)。

arr1.splice(1,1,"张三","李四","王五");
Javascript 相关文章推荐
简单的JS多重继承示例
Mar 13 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
Jul 29 Javascript
js实现同一个页面多个渐变效果的方法
Apr 10 Javascript
基于JavaScript怎么实现让歌词滚动播放
Nov 03 Javascript
javascript自动切换焦点控制效果完整实例
Feb 02 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
Feb 05 Javascript
想用好React的你必须要知道的一些事情
Jul 24 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
Mar 15 Javascript
解决Vue调用springboot接口403跨域问题
Sep 02 Javascript
vue动态禁用控件绑定disable的例子
Oct 28 Javascript
JavaScript队列结构Queue实现过程解析
Mar 07 Javascript
JS实现横向跑马灯效果代码
Apr 20 Javascript
angular2模块和共享模块详解
Apr 08 #Javascript
vue下拉列表功能实例代码
Apr 08 #Javascript
详解Vue-cli webpack移动端自动化构建rem问题
Apr 07 #Javascript
vue-cli开发环境实现跨域请求的方法
Apr 07 #Javascript
Angular5给组件本身的标签添加样式class的方法
Apr 07 #Javascript
Vue实现内部组件轮播切换效果的示例代码
Apr 07 #Javascript
Javascript实现运算符重载详解
Apr 07 #Javascript
You might like
php auth_http类库进行身份效验
2009/03/19 PHP
php获取url字符串截取路径的文件名和扩展名的函数
2010/01/22 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
javascript:void(0)是什么意思示例介绍
2013/11/17 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
vue.js 实现输入框动态添加功能
2018/06/25 Javascript
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
python append、extend与insert的区别
2016/10/13 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
python分布式环境下的限流器的示例
2017/10/26 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
Python中的集合介绍
2019/01/28 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
汽修专业自荐信
2014/07/07 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
2016年清明节期间群众祭祀活动工作总结
2016/04/01 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
Python Socket编程详解
2021/04/25 Python
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL