数组排序方法——reverse() 和 sort() !! sort( ) 参数浅析

sort( )  和  reverse( )  , 前者默认升序,后者反转数组原来的顺序。

sort( )  执行后会调用每个数组元素的toString( )方法,然后对得到的字符串进行排序。所以出现以下问题:

var values = [ 1, 2, 15, 5, 12]
values.sort()
//输出  0, 1, 12, 15 , 5

  

因此,sort( )接受一个比较函数作为参数来进行排序。

比较函数接受两个参数。这两个参数遵循一个法则:如果第一个参数应该排在第二个之前则返回一个负数,如果第一个参数应该排在第二个之后则返回一个正数,如果两个参数相等则返回0。

function compare(val1, val2){
  if (val1 < val2){
    return -1
  }else if(val1 > val2){
    return 1
  }else{
    return 0
  }
}

var values = [ 1, 15, 5, 12]
values.sort(compare);
//输出  1, 5, 12, 15

  

运行过程如下:

//根据冒泡排序来进行升序:  第一个小于第二个,则第一个排在第二个前面,位置不变。这里依照上面的法则,return  -1
//运行第一次
if(1 < 15){
  return -1
}//得到排序结果 [1, 15, 5, 12]

//冒牌排序:  第一个大于第二个,则第一个排在第二个后面,位置对换。这里依照上面的法则,retrun 1//运行第二次if(15 > 5){  return 1}//得到排序结果 [1, 5, 15, 12]

//运行第三次,同理得到最终结果  [1, 5, 12, 15]

  

同理需要降序的时候:

if(val1 < val2){
  return 1
}else if(val1 > val2){
  return -1
}

简洁写法:

function compare(val1, val2){
  return val1 - val2
}

var values = [ 1, 15, 5, 12]
values.sort(compare);
//输出  1, 5, 12, 15

  

如果实在理解不了,还是直接记住简洁写法的好。。。。。

参考资料:

《JavaScript高级程序设计》P92,P93

MDN: Array.prototype.sort()

原文地址:https://www.cnblogs.com/ly0612/p/8277976.html

时间: 2024-10-12 21:01:42

数组排序方法——reverse() 和 sort() !! sort( ) 参数浅析的相关文章

python 列表排序方法reverse、sort、sorted基础篇

python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse()方法 将列表中元素反转排序,比如下面这样 >>> x = [1,5,2,3,4] >>> x.reverse() >>> x [4, 3, 2, 5, 1] reverse列表反转排序:是把原列表中的元素顺序从左至右的重新存放,而不会对列表中的参数进行排序

Python 列表排序方法reverse、sort、sorted详解

python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse()方法 将列表中元素反转排序,比如下面这样 1 2 3 4 >>> x = [1,5,2,3,4] >>> x.reverse() >>> x [4, 3, 2, 5, 1] reverse列表反转排序:是把原列表中的元素顺序从左至右的重新存放,而不会对列表

python中sorted方法和列表的sort方法

sort 与 sorted 区别: sort 是应用在 list 上的方法,属于列表的成员方法,sorted 可以对所有可迭代的对象进行排序操作. list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作. sort使用方法为ls.sort(),而sorted使用方法为sorted(ls) 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元

实例365(14)---------经典数组排序方法------快速排序法

一:截图 二:快速排序详解 快速排序法(QuickSort)是一种非常快的对比排序方法.它也Divide-And-Conquer思想的实现之一.自从其产生以来,快速排序理论得到了极大的改进,然而在实际中却十分难以编程出正确健壮的代码.本文将对快速排序算法的基本理论和编程实践方面做作一个全面的讲解.在本文讲解中,将忽略很多细枝末节,试图给读者形成一个非常具体的快速排序形象. 快速排序---基本理论 因为该算法是Divide-And-Conquer思想的一个实现,所以本文将以Divide-And-C

PHP 数组排序方法总结

sort:本函数为 array 中的单元赋予新的键名.这将删除原有的键名而不仅是重新排序. rsort:本函数对数组进行逆向排序(最高到最低). 删除原有的键名而不仅是重新排序. asort:对数组进行排序并保持索引关系 arsort:对数组进行逆向排序并保持索引关系 ksort:对数组按照键名排序,保留键名到数据的关联 krsort:对数组按照键名逆向排序,保留键名到数据的关联 natsort:对字母数字字符串进行排序并保持原有键/值的关联 natcasesort:同natsort排序算法,但

MySQL性能优化之max_connections配置参数浅析

这篇文章主要介绍了MySQL性能优化之max_connections配置参数浅析,本文着重讲解了3种配置max_connections参数的方法,需要的朋友可以参考下 MySQL的max_connections参数用来设置最大连接(用户)数.每个连接MySQL的用户均算作一个连接,max_connections的默认值为100.本文将讲解此参数的详细作用与性能影响. 与max_connections有关的特性 MySQL无论如何都会保留一个用于管理员(SUPER)登陆的连接,用于管理员连接数据库

ngrep环回接口数据抓取方法,使用-d lo参数

ngrep环回接口数据抓取方法,使用-d lo参数,注意顺序: ngrep -W byline -d lo port 80

当写listview的onItemClick的方法时写Toast的参数context写成this出现can&#39;t resolve method ’make text(OnClickListener,java.lang.String,int)&#39;的错误,原因

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fruit fruit = fruitList.get(position); //Toast.makeText(this,fruit.getName(),Toast.L

实例365(13)---------经典数组排序方法------选择排序法

一:使用选择排序法对一维数组进行排序,截图 /*选择排序的个人理解:第一遍筛选,选出其中最大的值,得到值和下标 将最大的值的位置和数组的第一个位置交换 从数组的第二个位置开始第二遍筛选 将其中最大的值的位置和数组的第二个位置交换 直到筛选完数组 */ 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; u