参考JavaScript高级程序设计

在默认情况下,sort()方法按升序排列数组项--即最小的值位于最前面,最大的值排在最后面。为了实现排序,sort方法会调用每个数组项的toSting()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中每一项都是数值,sort()方法比较的也是字符串,如下所示:

var values = [0,1,5,10,15];
values.sort();
alert(values);  //0,1,10,15,5

可见,例子中的数组中值顺序没有问题,但sort()方法会根据字符串测试结果改变原来的顺序。因为即使数值5小于10,但在进行字符串比较时,“10”位于“5”前面,于是数组的顺序被修改了。 所以,这种排序方式在很多情况下都不是最佳方案。 因此sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。

比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个参数之后则返回一个正数。以下是一个简单的比较函数:

function compare(value1,value2) {if (value1 < value2) {return -1;} else if (value1 > value2) {return 1;} else {return 0;}
}

这个函数可以适用于大多数数据类型,只要将其作为参数传递给sort()方法即可,如下:

var values = [0,1,5,10,15];
values.sort(compare);
alert(values);   //0,1,5,10,15

将比较函数传递给sort()方法之后,数值保持了正确的升序。当然也可以通过比较函数产生降序排序结果,只要交换比较函数返回的值即可:

function compare(value1,value2) {if (value1 < value2) {return 1;} else if (value1 > value2) {return -1;} else {return 0;}
}
var values = [0,1,5,10,15];
values.sort(compare);
alert(values);   //15,10,5,1,0

如果只是想反转数组原来的顺序,使用reverse()方法要更快些。

小练习

1、有一个数组包含字符串和数字,现在要升序排列数组,数字在字符串之前:

var values = [15,8,"a","f",5,15,"d"];
function compare (a,b){if(typeof a == typeof b){if(a>b){return 1;} else {return -1;}} else if (typeof a == "string"){return 1;} else {return 0;}
}
values.sort(compare);
alert(values);   //5,8,15,15,a,d,f

2、随机排序一个数组

var values = [1,2,3,4,5,6,7,8,9];
values.sort(function(){return 0.5-Math.random();
});

转载于:https://www.cnblogs.com/blackwood/archive/2013/03/20/2968667.html

Array的sort() 方法相关推荐

  1. Javascript Array对象 sort()方法,记忆方法,方法扩展

    相信 有很多 同仁们,尤其是初学者,在记住 Array对象 sort() 方法的排序,规则上,有点困难: 其实sort()方法已经在实际工作中用到很多遍了,可当我仔细推敲,这个sort()方法,什么时 ...

  2. Array的sort方法

    作为一个刚开始学习的前端,小结一下: sort方法: 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转 ...

  3. js中关于array的slice和sort方法(转自JavaEye)

    一.array.slice(start, end) 方法: slice()是用来截取数组中的一部分,用它来复制数组,如果省略了end参数,则切分的数组包含从start开始到数组结束的所有元素. 现在要 ...

  4. js中的数组Array定义与sort方法使用示例

    js中的数组Array定义与sort方法使用示例 Array的定义及sort方法使用示例 Array数组相当于java中的ArrayList  定义方法:  1:使用new Array(5  )创建数 ...

  5. Array.Sort方法

    该方法采取的排序算法是快速排序算法.有关该算法的一些理论知识,如下 快速排序对冒泡排序的一种改进.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有 ...

  6. Java Arrays.Sort方法重写

    当原始的java sort方法无法满足我们的需求时候,我们需要自定义一些排序方法,此时需要重写Array.sort方法重写. 模板代码如下,默认是从小到大排序的,如果想从大到小,把a-b换为b-a即可 ...

  7. js数组 sort方法的分析

    avascript 中 Array.sort()方法是用来对数组项进行排序的 ,默认情况下是进行升序排列,实例代码如下:     var arrA = [6,2,4,3,5,1];     arrA. ...

  8. [Java基础] sort方法--------排序的那些事

    引言 在学习Java过程中,排序sort是我们常用的功能:在Java里,数组有Arrays.sort()可以排序,集合则是Collections.sort()方法排序:默认情况下是升序排列,但是降序又 ...

  9. ajax id sort,ajax返回的json内容进行排序使用sort()方法实现

    ajax返回的json内容进行排序使用sort()方法实现 关键方法:sort()用于对数组的元素进行排序. return a.num-b.num是升序: return b.num-a.num;是降序 ...

最新文章

  1. Pytorch中的variable, tensor与numpy相互转化的方法
  2. Android为TV端助力 转载:android自定义view实战(温度控制表)!
  3. 廖雪峰python教程在哪看_:廖雪峰python教程在哪
  4. 【BZOJ3669】【codevs3314】魔法森林,写作LCT,读作SPFA
  5. NASM汇编语言与计算机系统03-实模式-屏幕显示HelloWorld(mov,jmp,time,dd,dw,$$)
  6. Iranian ChamPions Cup 水题
  7. 乔布斯:你须寻得所爱(转)
  8. python分片赋值_关于 python 分片赋值
  9. 计算机二级知识汇总手抄报,计算机二级vb_全国计算机二级vb真题
  10. ArcGIS:如何创建地理数据库、创建要素类数据集、导入要素类、表?
  11. 深度linux如何装win系统,在深度deepin系统中使用deepin-wine自定义安装win程序的方法...
  12. memcmp函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用、自己实现函数 )
  13. 计算机基础快捷键的使用
  14. win10中 微软 输入法 简体字 与 繁体字 设定 切换
  15. 解决tar: Error is not recoverable: exiting now
  16. C# Culling Mask
  17. 纳滤膜分离技术用于制药提纯精制处理 稳定可靠
  18. 新 iPhone 去“刘海”、AR/VR 头显或成 One More Thing,苹果秋季发布会前瞻!
  19. 什么是 Hash 算法?
  20. WhatsApp 批量解封提交工具

热门文章

  1. c++判断文件是否被修改(获取文件的MD5值)
  2. 自动化交易综述——互联网金融
  3. 应用程序的并行配置不正确_阿里架构师:天天高并发,达不到百万以上并发都不叫高并发...
  4. linux c段错误,Linux C中段错误
  5. FPGA笔录(2)-触发器与锁存器原理
  6. 时间序列总结.pptx
  7. 【学术相关】科技论文写作:grammerly润色工具
  8. 【NLP】好资源!近 20 万本 txt 书籍的语料库,可用于 GPT 模型训练和语义分析...
  9. 【Python基础】Python列表生成式
  10. 【机器学习基础】逻辑回归 + GBDT模型融合实战!