转载自:http://www.w3cplus.com/javascript/calculate-the-max-min-value-from-an-array.html

取数组中最大值

可以先把思路理一下:

一、将数组中第一个元素赋值给一个变量,并且把这个变量作为最大值;

二、开始遍历数组,从第二个元素开始依次和第一个元素进行比较;

三、如果当前的元素大于当前的最大值,就把当前的元素值赋值给最大值;

四、移动到下一个元素,继续按前面一步操作;

五、当数组元素遍历结束时,这个变量存储的就是最大值。

代码如下:

Array.prototype.max = function () {
// 将数组第一个元素的值赋给max
var max = this[0];
// 使用for 循环从数组第一个值开始做遍历
for (var i = 1; i < this.length; i++) {
// 如果元素当前值大于max,就把这个当前值赋值给max
if (this[i] > max) {
max = this[i];
}
}
// 返回最大的值
return max;
}

来看一个示例:

var arr = [1,45,23,3,6,2,7,234,56];
arr.max(); //

上面的示例,数组中都是数值,那么如果数组中不全是数值会是一个什么样的效果呢?来测试一下先:

var arr = [1,45,23,3,6,2,7,234,56,'2345','a','c'];
arr.max(); // 'c'

这并不是我们想要的结果吧。(此处跪求解决方案)

通过前段时间的学习,都知道for循环性能要比forEach()差,那可以将上面的方法改成forEach()方法:

Array.prototype.max = function (){
var max = this[0];
this.forEach (function(ele,index,arr){
if(ele > max) {
max = ele;
}
})
return max;
}
var arr = [1,45,23,3,6,2,7,234,56];
arr.max(); //

取数组中最小值

类似取最大值的思路一样,我们可以很轻松的实现arr.min()方法,取出数组中的最小值:

Array.prototype.min = function () {
var min = this[0];
this.forEach(function(ele, index,arr) {
if(ele < min) {
min = ele;
}
})
return min;
} var arr = [1,45,23,3,6,2,7,234,56];
arr.min(); //

其他方法

除了上面的方案,还可以有其他方法,比如使用数组的reduce()方法。回忆前面的学过的知识,reduce()方法可以接收一个回调函数callbackfn,可以在这个回调函数中拿数组中的初始值(preValue)与数组中当前被处理的数组项(curValue)做比较,如果preValue大于curValue值返回preValue,反之返回curValue值,依此类推取出数组中最大值:

Array.prototype.max = function() {
return this.reduce(function(preValue, curValue,index,array) {
return preValue > curValue ? preValue : curValue;
})
}
var arr = [1,45,23,3,6,2,7,234,56];
arr.max(); //

同样的也可以使用类似的方法实现arr.mix()方法,取出数组中的最小值:

Array.prototype.min = function() {
return this.reduce(function(preValue, curValue,index,array) {
return preValue > curValue ? curValue : preValue;
})
}
var arr = [1,45,23,3,6,2,7,234,56];
arr.min(); //

内置函数Math.max()Math.min()方法

对于纯数字数组,可以使用JavaScript中的内置函数Math.max()Math.min()方法。使用这两个内置函数可以分别找出数组中的最大值和最上值。在使用这两种内置函数取出数组最大和最小值之前,先学习一下Math.max()Math.min()两个函数。

Math.max()

Math.max()函数返回一组数中的最大值。

Math.max(1,32,45,31,3442,4); //
Math.max(10, 20); //
Math.max(-10, -20); // -10
Math.max(-10, 20); //

Math.min()

Math.min()函数和Math.max()函数刚好相反,其会返回一组数中的最小值:

Math.min(10,20); //
Math.min(-10,-20); //-20
Math.min(-10,20); //-10
Math.min(1,32,45,31,3442,4); //

这些函数如果没有参数,则结果为 -Infinity;如果有任一参数不能被转换为数值,则结果为 NaN。最主要的是这两个函数对于数字组成的数组是不能直接使用的。但是,这有一些类似地方法。

Function.prototype.apply()让你可以使用提供的this与参数组与的数组来调用参数

// 取出数组中最大值
Array.max = function( array ){
return Math.max.apply( Math, array );
};
// 取出数组中最小值
Array.min = function( array ){
return Math.min.apply( Math, array );
}; var arr = [1,45,23,3,6,2,7,234,56];
Array.max(arr); //
Array.min(arr); //

Math对象也是一个对象,可以使用对象的字面量来写,如:

Array.prototype.max = function () {
return Math.max.apply({},this);
}
Array.prototype.min = function () {
return Math.min.apply({},this);
}
var arr = [1,45,23,3,6,2,7,234,56];
arr.max(); //
arr.min(); //

其实还有更简单的方法。基于ES2015的方法来实现此功能,是使用展开运算符

var numbers = [1, 2, 3, 4];
Math.max(...numbers) //
Math.min(...numbers) //

此运算符使数组中的值在函数调用的位置展开。

总结

这篇文章整理了几个从数组中取出最大值和最小值的方法。这几个方法都只是会对于数字数组,而对于数组中包含其他数据类型时,如何只取出最大的数值和最小的数值(如果您知道如何实现,还望指点迷津)。而这几种方法当中,使用JavaScript的内置函数Math.max()Math.min()配合Function.prototype.apply()可以轻松取出数组中的最大值和最小值。当然最最简单的要当数ES2015中使用展示运算符的方法。如果大家还有更好的方案,希望能在下面的评论中与我们一起分享。

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
原文: https://www.w3cplus.com/javascript/calculate-the-max-min-value-from-an-array.html © w3cplus.com

转载——JavaScript学习笔记:取数组中最大值和最小值的更多相关文章

  1. JavaScript学习:取数组中最大值和最小值

    在实际业务中有的时候要取出数组中的最大值或最小值.但在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最 ...

  2. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  3. JavaScript学习笔记:数组reduce()和reduceRight()方法

    很多时候需要累加数组项的得到一个值(比如说求和).如果你碰到一个类似的问题,你想到的方法是什么呢?会不会和我一样,想到的就是使用for或while循环,对数组进行迭代,依次将他们的值加起来.比如: v ...

  4. JavaScript学习笔记之 数组方法一 堆栈 和队列

    数组的方法 以及 堆栈的操作的方法 JavaScript是一种弱类型语言,不像其它程序语言需要严格定义数据类型.在JavaScript中数组可以任意修改变动,这样也就出现了一个问题,如果边遍历数组边操 ...

  5. JavaScript学习笔记之数组(一)

    数组基础篇 一.数组概述 1. 数组的语法 数组(array)是按次序排列的一组值.每个值的位置都有编号(从0开始). var arr=[1,2,3] //arr[0]=1 任何类型的数据,都可以放入 ...

  6. JavaScript学习笔记——4.数组

    数组(Array) 数组也是一个对象   数组中保存的内容我们称为元素 数组的操作 - 创建数组 - var arr = new Array();   - var arr = []; 例如:var m ...

  7. Javascript实例:求数组中最大、最小值及下标

    题目:定义一个数组,并给出7个整数,求该数组中的最大值,及最大值下标,最小值及最小值下标.<script type="text/javascript">//定义一个数组 ...

  8. js获取数组中最大值和最小值

    var max = Math.max.apply(null, 数组); 获取最大值 var min = Math.min.apply(null, 数组);获取最小值 一句话获取数组中最大的数,最小数

  9. javascript 学习笔记之JQuery中的Deferred对象

    Deffered是Jquery中的一个非常重要的对象,从1.5版本之后,Jquery中的ajax操作都基于Deffered进行了重构,这个对象的处理模式就像其他Javascript框中的Promise ...

随机推荐

  1. FileUpload上传

    单文件上传: ASPX: <div> <!-- 文件上传 --> <asp:FileUpload ID="FileUpload1" runat=&qu ...

  2. form表单提交数据,页面必定会刷新,ajax提交数据不会刷新,做到悄悄提交,多选删除,ajax提交实例

    很多页面用到的模态对话框,如知明网站https://dig.chouti.com/的登录页都是模态对话框, 当点登录时,是用的ajax提交,因为输入错了信息,有返回消息,而页面没有刷新. jquery ...

  3. iis重写模块实现程序自动二级域名,微软提供的URL重写2.0版本适用IIS以上

    在iis7以后微软提供了url重写2.0版本,可以通过安装重写组件来实现.适用于iis7以上版本. 安装有两种方式可以选择,一是下载安装文件,二是通过“web平台安装程序”安装 1.下载安装文件 下载 ...

  4. spark安装

    Spark下载 在spark主页的download下,选择自己想要安装的spark版本, 注意跟本地hadoop的兼容性.我这里选择了2.4.0. https://www.apache.org/dyn ...

  5. Ubuntn16.04.3安装Hadoop3.0+scale2.12+spark2.2

    Ubuntn16.04.3安装Hadoop3.0+scale2.12+spark2.2 对比参照此博文.bovenson 前言:因为安装的Hadoop.Scale是基于JAVA的应用程序,所以必须先安 ...

  6. MFC 解决中文乱码问题

    新的编译工具默认的是unicode编码方式,许多在多字节下面显示中文的方法已经不再适用了按照道理说设置为unicode编码后应该会很好的支持中文, 但是实际情况很悲惨,显示的都是乱码. 看到网上的很多 ...

  7. GPRS骨干网逻辑结构

    从逻辑上来说,GPRS通过在GSM网络结构中增添SGSN和GGSN两个新的网络节点来实现.由于增加了这两个网络节点,需要命名新的接口.图1说明了GPRS逻辑体系结构.表1给出了GPRS体系结构中的接口 ...

  8. GSM与GPRS的区别

    1.    GSM是全球移动通讯系统(Global System for Mobile Communications)的简称 2.    GPRS是通用分组无线业务(General Packet Ra ...

  9. Galaxy2D Game Engine 4.2 开发版发布

    Update: ◆删除Graph_GetRenderTarget()函数,添加Graph_CopyBackBuffer()/Graph_CopyRanderTarget()函数 ◆Graph_EndS ...

  10. Ehcart整合百度地图

    最近上班有些时间,学习了一下Ehcart的知识,自己制作了一份Ehcart整合百度地图的示例代码. GItHub地址:https://github.com/TianYanFd/tianjin-powe ...