个人对sort()排序方法中比较函数一直很混乱,今日理清
需求:使用随机数来打印出0-10,并排序。
代码:
var a = new Array();
var testArray = function() {
while (1) {
var b = parseInt(Math.random() * 11);
if (a.indexOf(b) === -1) {
a.push(b);
}
if (a.length >= 11) {
break;
}
}
a.sort(function(a, b) {
return a - b;
});
console.log(a);
}
testArray();
结果:
关于sort()方法,当不传入任何参数时,会按照字母表中的顺序进行排序
如:
var a = new Array();
var testArray = function() {
while (1) {
var b = parseInt(Math.random() * 11);
if (a.indexOf(b) === -1) {
a.push(b);
}
if (a.length >= 11) {
break;
}
}
a.sort();
console.log(a);
}
testArray();
结果:
所以使用sort()时,应当传入比较函数,比较函数可以有两个参数a,b,当两数相减,结果<0,则第一个参数放在前,反之在后,依次排序,如:参数顺序为a,b,若a-b<0,则a在前b在后,而比较函数为b-a时,b-a<0,第一个参数在前,即a在前(但此时a比b大,即从大到小的排序)。由于鄙人悟性低,理解能力差,表达能力也差,在看书时被绕了好久,此时说也说不清,于是举以下例子:
1.从小到大排序(以下代码为比较函数中的内容)
function(a,b){
return a-b;
}
function(1,3){
return 1-3;
}
当传入1,3时,1-3<0,所以第一个参数'a'在前,顺序即[1,3]。
2.从小到大排序
function(a,b){
return a-b;
}
function(3,1){
return 3-1;
}
此时按3,1的顺序传入,3-1大于0,所以第一个参数'a'在后,顺序为[1,3]。
3.从大到小排序
function(a,b){
return b-a;
}
function(1,3){
return 3-1;
}
此时按1,3的顺序传入,3-1大于0,所以第一个参数'a'在后,顺序为[3,1]。
4.从大到小排序
function(a,b){
return b-a;
}
function(3,1){
return 1-3;
}
(为啥不能上传代码了。。。)
此时按3,1的顺序传入,1-3小于0,所以第一个参数'a'在前,顺序即[3,1]。
总结:前端技术日新月异,作为初学者的我,在关注技术动态的时候,当时刻不忘基础知识,时时巩固。
个人对sort()排序方法中比较函数一直很混乱,今日理清的更多相关文章
- <JavaScript>数组的sort()方法中比较函数是怎么工作的
sort()函数比较时调用的是每个数组项的toString()方法,并非按数值大小进行比较,所以往往得不到我们想要的结果. 比如: ,,,,]; values.sort( ); alert(value ...
- 解析JavaScript中的sort()排序方法以及原理
Array.sort()方法将数组中的元素进行排序,返回排序后的数组,默认是按照升序排序的.sort方法会调用数组中每一项的toString()方法,然后按照ascii编码进行排序,如果数组含有und ...
- js数组sort排序方法的算法
说明一下,ECMAScript没有定义使用哪种排序算法,各个浏览器的实现方式会有不同.火狐中使用的是归并排序,下面是Chrome的sort排序算法的实现. sort方法源码 DEFINE_METHOD ...
- JAVA Collections工具类sort()排序方法
主要分析内容: 一.Collections工具类两种sort()方法 二.示例 一.Collections工具类两种sort()方法 格式一: public static <T extends ...
- 关于Collections.sort()排序方法的源码探索
/**下面在自己代码中使用Collections.sort()方法去比较Student对象,通过在自己写的类里面通过匿名内部类实现Comparator接口,这个接口是让你自己实现比较器的规则*/ // ...
- java排序方法中的选择排序方法
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完. package array; //选择排序方法 public class arra ...
- java数组中的三种排序方法中的冒泡排序方法
我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...
- MongoDB limit 选取 skip跳过 sort排序 方法
MongoDB limit 选取 skip跳过 sort排序 在mysql里有order by MongoDB用sort代替order by > db.user.find() { " ...
- DataTable.DefaultView.Sort 排序方法
今天在整合一个东西,需要用到DataTable的一个排序方法, 前我是将DataTable存到DataView里面的,所以刚开始就使用了DataView.Sort="ColumnName A ...
随机推荐
- java 执行jar指定log4j.properties文件位置
默认情况下,log4j.properties会被加载,并且这个文件需要在classpath根目录,当打包jar时,会打包打jar内部,当需要修改日志级别时,会比较麻烦 可以使用:java -jar - ...
- WebUpLoder 能自动预览,能多实例,包括后台demo
样式在网上找的.样子: 懒得写别的了,代码里面我写的注释挺详细的:https://github.com/zhangsai521314/WebUpLoder 写文不易,转载请注明出处:http://ww ...
- eclipse maven web环境搭建
选择创建new project 勾选跳过创建类型选择(让eclipse创建标准maven项目) 填写组织ID,唯一ID,注意:如果选择打包类型为war包时,会生成web类型的maven工程 修改JRE ...
- main函数的详解
public : 公共的. 权限是最大,在任何情况下都可以访问. 原因: 为了保证让jvm在任何情况下都可以访问到main方法. static: 静态.静态可以让jvm调用main函数的时候更加的方便 ...
- epoll里面mmap释疑
今天看到有文章说epoll里面用了mmap,还说进程不需要从内核读数据,只需要从用户态buffer读数据就可以.觉得很神奇,就查了一下,发现完全不是描述的那样.实际上,只是把要传递的fd通过mmap来 ...
- typeof,GetType
typeof: 是运算符,获得某一类型的 System.Type 对象. Int32 t = new Int32(); Type t = typeof(int); GetType: 是方法,获取当前实 ...
- Android之Activity状态的保存和恢复
系统在某些情况下会调用onSaveInstanceState()和onRestoreInstanceState() 这两个方法来保存和恢复Activity的状态. 一句话:Activity在" ...
- 安装linux操作系统
安装双操作系统; 1 0. 介绍: 1 1 实验环境: 2 2. 实验准备: 2 3.开始安装: 2 1 制作U盘启动工具: 2 2.安装LinuxOS. 3 2.1在windowOS中划分60G空间 ...
- 通过OCCI连接oracle(C++)
OCCI介绍 OCCI:Oracle C++调用接口(OCCI),即Oracle的C++API,允许你使用面向对象的特性.本地类.C++语言的方法来访问Oracle数据库. OCCI优势 基于标准C+ ...
- gulp教程之gulp-minify-css
简介: 使用gulp-minify-css压缩css文件,减小文件大小,并给引用url添加版本号避免缓存.重要:gulp-minify-css已经被废弃,请使用gulp-clean-css,用法一致. ...