当前位置: 首页 > 编程日记 > 正文

JavaScript 数组排序及查找数组中最大值最小值方法

JavaScript 数组排序方法及查找最大值最小值方法

  • 1. sort()方法排序
    • 1.1 方法介绍
    • 1.2 语法:arr.sort([compareFunction])
    • 1.3 参数说明
    • 1.4 返回值: 排序后的数组。
    • 1.5 方法描述
  • 2. 最大值/最小值方法
    • 2.1 查找数组中的最大值
      • 2.1.1 Math.max.apply()方法
        • 语法:Math.max.apply(null, arr)
        • 参数说明:
      • 2.1.2 自定义算法
    • 2.2 查找数组中的最小值
      • 2.2.1 Math.min.apply()方法
        • 语法:Math.min.apply(null, arr)
        • 参数说明:
      • 2.2.2 自定义方法

1. sort()方法排序

1.1 方法介绍

sort()方法用原地算法对数组的元素进行排序,并返回数组。默认排序顺序是在将元素转换为字符串,然后比较它们的UTF-16代码单元值序列时构建的。

由于它取决于具体实现,因此无法保证排序的时间和空间复杂性。

1.2 语法:arr.sort([compareFunction])

1.3 参数说明

  • compareFunction 可选,用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。
    • firstEl,第一个用于比较的元素。
    • secondEl,第二个用于比较的元素。

1.4 返回值: 排序后的数组。

注意: 数组已原地排序,即会改变原数组,并且不进行复制。

1.5 方法描述

如果没有指明 compareFunction,那么元素会按照转换为的字符串的诸个字符的Unicode位点进行排序。
例如 “Banana” 会被排列到 “cherry” 之前。当数字按由小到大排序时,9 出现在 80 之前,但因为(没有指明 compareFunction),比较的数字会先被转换为字符串,所以在Unicode顺序上 “80” 要比 “9” 要靠前。

如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
  • 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
  • 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
  • compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

所以,比较函数格式如下:

function compare(a, b) {if (a < b ) {           // 按某种排序标准进行比较, a 小于 breturn -1;}if (a > b ) {return 1;}// a must be equal to breturn 0;
}

要比较数字而非字符串,比较函数可以简单的以 a 减 b,如下的函数将会将数组升序排列:

function compareNumbers(a, b) {return a - b;
}

sort 方法可以使用 函数表达式 方便地书写:

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {return a - b;
});
console.log(numbers);
// 控制台输出:[1, 2, 3, 4, 5]

对象可以按照某个属性排序:

var items = [{ name: 'Edward', value: 21 },{ name: 'Sharpe', value: 37 },{ name: 'And', value: 45 },{ name: 'The', value: -12 },{ name: 'Magnetic' },{ name: 'Zeros', value: 37 }
];// sort by value 对数值进行排序
items.sort(function (a, b) {a.value = a.value ? a.value : 0;b.value = b.value ? b.value : 0;return (a.value - b.value)
});// sort by name 对字符串进行排序
items.sort(function(a, b) {var nameA = a.name.toUpperCase(); // ignore upper and lowercasevar nameB = b.name.toUpperCase(); // ignore upper and lowercaseif (nameA < nameB) {return -1;}if (nameA > nameB) {return 1;}// names must be equalreturn 0;
});

注意: 对象按照某个属性进行排序时,需要对该属性是否存在进行判断,若该属性不存在,则需要在其所在的对象上添加该属性并为其设定默认的属性值,否则在排序时,不存在该属性的对象之后的数据不会参与排序操作。

参考文档: MDN Array.prototype.sort()


2. 最大值/最小值方法

2.1 查找数组中的最大值

2.1.1 Math.max.apply()方法

语法:Math.max.apply(null, arr)

参数说明:

  • 第一个参数传null,因为没有对象来调用它。
  • 第二个参数传一个数组。

apply()方法可以将数组转换成参数列表。第二个参数必须是由能转换成number类型的数值组成的数组。

2.1.2 自定义算法

function searchArrayMax(arr) {var len = arr.lengthvar max = arr[0];while (len--) {if (arr[len] > max) {max = arr[len];}}return max;
}

2.2 查找数组中的最小值

2.2.1 Math.min.apply()方法

语法:Math.min.apply(null, arr)

参数说明:

  • 第一个参数传null,因为没有对象来调用它。
  • 第二个参数传一个数组。

apply()方法可以将数组转换成参数列表。第二个参数必须是由能转换成number类型的数值组成的数组。

2.2.2 自定义方法

function myArrayMin(arr) {var len = arr.lengthvar min = arr[0];while (len--) {if (arr[len] < min) {min = arr[len];}}return min;
}

—— END ——

相关文章:

35个必备的wordpress插件

博客一开始是自己写的小程序&#xff0c;但自己写程序实在太麻烦了&#xff0c;不想写&#xff0c;于是转成了bo-blog&#xff0c;用了几周&#xff0c;感觉还是不太理想&#xff0c;就又转换成了wordpress&#xff0c;这个博客程序也不是什么省油的灯&#xff0c;用起来也不是…

1042. 托普利兹矩阵

描述 “托普利兹矩阵”是指如果从左上角到右下角的同一条主斜线上每个元素都相等的矩阵. 给定一个M x N矩阵&#xff0c;判断是否为“托普利兹矩阵”. matrix 是一个二维整数数组.matrix 的行列范围都为 [1, 20].matrix[i][j] 的整数取值范围为[0, 99].样例 样例 1: 输入: matr…

git控制台指令

git stash: 备份当前的工作区的内容&#xff0c;从最近的一次提交中读取相关内容&#xff0c;让工作区保证和上次提交的内容一致。同时&#xff0c;将当前的工作区内容保存到Git栈中。git stash pop: 从Git栈中读取最近一次保存的内容&#xff0c;恢复工作区的相关内容。由于可…

Web架构师必备能力

最近和几个朋友在谈到时下流行的Web 2.0&#xff0c;也提到了其中最重要的角色——架构师。多方各有争执&#xff0c;不外乎是因为背景和视角的缘故&#xff0c;包括架构一词&#xff0c;本身就从建筑学借鉴而来&#xff0c;至于架构师&#xff0c;则可以简单地从建筑学的设计师…

深入理解C语言-二级指针三种内存模型

二级指针相对于一级指针&#xff0c;显得更难&#xff0c;难在于指针和数组的混合&#xff0c;定义不同类型的二级指针&#xff0c;在使用的时候有着很大的区别 第一种内存模型char *arr[] 若有如下定义 char *arr[] {"abc", "def", "ghi"};这种…

如何获取URL中的参数

获取URL中的参数1. 使用JS函数获取URL参数使用示例2. Angular应用中&#xff0c;从URL中获取参数信息的方法使用示例ActivatedRoute属性1. 使用JS函数获取URL参数 function getQueryVariable(variable) {var query window.location.search.substring(1);var vars query.spli…

windows使用.NET CORE下创建MVC,发布到linux运行

1.在有dotnet core 的环境下&#xff0c;打开控制台。创建文件夹demo1 2.创建MVC程序 3.创建完成 4.使用记事本修改一下HomeController 修改端口 5.发布 6.压缩发布的文件publish&#xff0c;通过FTP上传到linux 7.解压 8.运行 9.浏览器浏览 转载于:https://www.cnblogs.com/qq…

Oracle正则表达式匹配中文的问题

查资料知道中文Unicode范围是\u4e00 - \u9fa5 可是自己用来正则表达式匹配中文总是用不了Unicode。最简单举例&#xff1a;select regexp_replace(abc秋歌def,[\u4e00-\u9fa5],-) from dual;结果是&#xff1a;-bc秋歌d-- 即将\u4e00-\u9fa5里面的a,b,e,f当成字符了。我用的是O…

Oracle HowTo:如何使用Oracle case函数

通过实例简要介绍case函数的用法。1.创建测试表:DROP SEQUENCE student_sequence; CREATE SEQUENCE student_sequence START WITH 10000 INCREMENT BY 1; DROP TABLE students; CREATE TABLE students (id NUMBER(5) PRIMARY KEY,first_name VARCHAR2(20…

Attribute 绑定、类绑定和样式绑定

Attribute 绑定、类绑定和样式绑定 1. 绑定到 Attribute 优先设置带有 Property 绑定的元素的 Property。如果没有可绑定的元素 Property&#xff0c;可以使用 Attribute 绑定。 例如&#xff0c;ARIA和SVG 只有 Attribute。 ARIA 和 SVG 都不对应于元素的 Property&#xf…

Mixing Milk(USACO)

/* ID:tianlin2 PROG:milk LANG:C */ #include <iostream> #include <cstdlib> #include <fstream> using namespace std; typedef struct milk milk; struct milk{ int mon; int wei; }; //最大农民数 milk m[5000]; int moncmp(const void *va,const void …

DVWA的安装与简单使用

参考资料: http://www.freebuf.com/articles/web/119150.html 尝试使用linux机器安装,但是因为下载php版本以及各种兼容性的问题耗时较长, 所以后来选择使用windows server 来进行安装: 1. 下载xampp 版本尽量使用低一些的 比如 php版本在5.4 以下 能够更简单的入门学习. 2. 下…

CentOS安装中文输入法

安装中文语言支持 yum install "chinese support" 然后启动中文你语言输入法 system -->Preferences-->Input Method Enable input method feature Input Method Preferences Inout Method 转载于:https://www.cnblogs.com/browselife/p/10646256.html

090613 今天做了一个软件没搞定的RAID5

今天做了一个RAID5 &#xff0c;之前一个人用《**恢复大师》、《r-studio》以及《RAID Reconstructor》反正能用的软件都用过了&#xff0c;最后的结果是恢复出来的&#xff0c;很多打不开&#xff0c;并且数据很少&#xff0c;最后找到了我&#xff0c;经过手工分析数据完美恢…

转:Flutter Decoration背景设定(边框、圆角、阴影、形状、渐变、背景图像等)...

1 继续关系&#xff1a; BoxDecoration:实现边框、圆角、阴影、形状、渐变、背景图像 ShapeDecoration:实现四个边分别指定颜色和宽度、底部线、矩形边色、圆形边色、体育场&#xff08;竖向椭圆&#xff09;、 角形&#xff08;八边角&#xff09;边色 FlutterLogoDecoration:…

Angular7中引用外部JS文件

Angular7中引用外部JS文件&#xff0c;步骤如下&#xff1a; 1. 将引入的js文件放到项目的src/assets下 2. 在angular.json文件中找到scripts项并配置js文件的相对路径 3. 在src/typings.d.ts文件中声明全局变量&#xff0c;如果不想声明全局变量&#xff0c;也可以在所需的组…

当前上下文中不存在viewbag

参考链接&#xff1a;http://www.cnblogs.com/chas/p/5076297.html view文件夹下的web.config中的appsetting节点中缺少了 <add key"webpages:version" value"3.0.0.0"/>&#xff0c;增加上去就行了&#xff0c;同时注意value要去系统中的版本保持一…

WPF:跨应用程序会话保持和还原应用程序范围的属性

所谓的wpf夸应用程序员会话保持和还原。其实就是将多个应用程序都用的资源保存到一个独立的文件存储系统中。这个应用程序退出的时候将数据写入文件中&#xff0c;其他应用程序使用的时候可以去读取这个文件这个地方用到了System.IO.IsolatedStorage。这个方法只是为了避免读写…

AD下批量导入域用户

如果您的域环境比较大,那么设置用户可能会不方便,就"新建用户"都可能重复做上几十遍....是不是很.....呵呵...下面介绍一个工具"csvde.exe",微软默认提供的.即默认随DC一起安装的,专门用来从"文本文件"批量导入"用户"的工具.几步就搞定…

测试 csdnmakerdown语法

TOC 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#…

Android studio快捷键

查看类的继承关系&#xff1a; CtrlH 自动补全抽象类型&#xff1a;AltEnter JAVA中注释掉//&#xff1a; Ctrl/ XML中注释掉&#xff1a; Ctlr/ 显示注释文档&#xff1a; CtrlQ 修改文件名&#xff1a; 点到需要修改的文件然后shiftF6 转载于:https://www.cnbl…

异步方法顺序调用问题

前端应用中时常出现多个异步方法需要依次调用&#xff0c;且后一个异步方法的执行依赖于前一个异步方法的返回结果的情况&#xff0c;下面主要介绍一下这种情况的处理方法。 方法1&#xff1a;异步方法嵌套调用 此种方法逻辑简单&#xff0c;但代码较为繁琐。 方法2&#xff1…

(转载)从无知到有知

这篇文章的作者是徐宥&#xff0c;觉得很有共鸣&#xff0c;好东西大家分享一下 February 3, 2010 at 11:07 pm Filed under Article, Memo, Self-help [这篇文章是以前写的&#xff0c;主要是提醒自己的] 人的一生是要不断学习的。这里面的动力很简单&#xff1a;因为我们在…

Cisco *** 完全配置指南-连载-PIX和ASA连接的故障诊断与排除

Cisco *** 完全配置指南-连载-PIX和ASA连接的故障诊断与排除一、ISAKMP/IKE阶段1连接<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />show isakmp sa [detail]显示任何管理连接的状态show [crypto] isakmp stats 显示管理连接的…

Angular应用开发中遇到的问题

记录在开发Angular应用时遇到的问题以及解决方案。 问题 3 前提&#xff1a;在Angular应用的组件中使用响应式表单进行数据校验&#xff0c;使用FormBuilder服务的 group()方法来构建一组FormControl实例。 需要监听其中控件的值的变化时&#xff0c;由于控件的类型为Abstrac…

小麦带你看postgres(代码模块结构)

初始化部分&#xff08;Initialization&#xff09; bootstrap&#xff1a;和系统表相关。 main&#xff1a;传递参数到后台的pg进程。 postmaster&#xff1a;控制pg服务开关&#xff0c;创建共享内存&#xff0c;循环等待连接并分配服务。 libpq&#xff1a;与子进程通讯相关…

c#学习的几个层次

1. 基本运用C#语法&#xff0c;在各种工具和示例代码的支持下&#xff0c;完成一些基本程序任务 2. 熟练掌握面向对象与组件构造&#xff0c;知其然亦知其所以然&#xff0c;完成一般小规模信息管理类软件项目开发任务 3. 深入理解CLR内核机制&#xff0c;对各种类型与.NET平…

nodeJs --- web服务器创建

一、下载nodeJs http://nodejs.cn/download/ 根据自己的情况选择下载 然后在命令行中输入 node -v 看是否安装成功 &#xff08;下载node时&#xff0c;会把npm包处理工具一起下&#xff09; 二、server,js 在文件夹下创建一个server.js var http require(http)http.createSer…

河北省医疗卫生数据中心案例简介

河北省卫生厅是负责全省卫生工作的政府部门&#xff0c;辖区人口6000万&#xff0c;其职能是基于国家卫生工作大政方针&#xff0c;研究提出全省卫生事业发展规划和战略目标&#xff0c;制订全省卫生工作计划、地方规范和标准&#xff0c;开展行业监督管理和服务。河北省卫生信…

Angular应用中tsconfig.json文件配置说明及配置全局路径映射

tsconfig.json文件配置说明1. tsconfig.json文件中的选项配置2. 配置全局路径映射1. tsconfig.json文件中的选项配置 TypeScript编译器配置文件的JSON模式 {"title": "JSON schema for the TypeScript compilers configuration file","$schema"…