个人对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 ...
随机推荐
- Scrum Meeting 12-20151218
任务安排 姓名 今日任务 明日任务 困难 董元财 无 网络连接框架优化 无 胡亚坤 无 修复商品列表排列混乱) 无 刘猛 无 无 马汉虎 无 无 赖彦俞 无 无 燃尽图 团队照片 代码签入记录 今天开 ...
- C#利用服务器实现客户端之间通信
这两天在学习C#,C#高级编程真的是厚厚的一本书QAQ. 昨天看了一下里面的通信部分(其实还没怎么看),看了网上一些人的博客,自己在他们的博客基础上写了一个通信. 先来讲述下我自己对于整个Socket ...
- windbg运行
运行起来会提示windbg is running. BUSY 这个是正常运行的状态,只有发生异常,或者被指定断点,才会中断.
- 如何让nginx显示文件夹目录
1. 如何让nginx显示文件夹目录 vi /etc/nginx/conf.d/default.conf 添加如下内容: location / { root /data/www/f ...
- unity调用摄像头的方法
http://blog.csdn.net/cocoa_china/article/details/10527995 using UnityEngine; using System.Collection ...
- 弹性盒布局(FlexBox)
CSS3引入了一种新的布局模式——Flexbox布局,即伸缩布局盒模型(Flexible Box),用来提供一个更加有效的方式制定.调整和分布一个容器里项目布局,即使它们的大小是未知或者动态的,这里简 ...
- jmeter ForEach Controller学习
ForEach Controller: foreach一般和用户定义变量一起使用,在用户定义变量中定义3个变量 foreach中输出变量名称(vname),这种方式可以生成一个vname的变量,点击运 ...
- 手机版web相关meta配置
若页面需默认用ie兼容内核,增加标签: 若页面需默认用ie标准内核,增加标签: --> 页面标题
- iOS:使用代理模式监听开关状态改变事件
记一次解决跨控制器监听开关状态改变的尝试. 为了统一设置UITableViewCell里的内容,自定义了UITableViewCell类的一个基类,命名为SettingCell.SettingCell ...
- Jmeter性能测试入门(链接收藏)
Jmeter性能测试入门: http://www.cnblogs.com/TankXiao/p/4045439.html