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

Posted ly0612

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组排序方法——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()

 

以上是关于数组排序方法——reverse() 和 sort() !! sort( ) 参数浅析的主要内容,如果未能解决你的问题,请参考以下文章

JS数组排序

JS中数组重排序方法

Javascript中数组重排序方法详解

数组重排序方法

数组的查找和排序方法

数组排序sort()