javascript学习笔记 之 数组的sort()和reverse()方法
1.sort()方法
sort()
方法对数组的元素做原地的排序,并返回这个数组。默认情况下,sort()
方法是按升序排列数组项。即最小的值位于最前面,最大的值排列在最后面。为了实现排序,sort()
方法会调用每个数组项的toString()
转型方法,然后比较得到的字符串,以确定如何排序。
先来看一个简单的示例
sort()
方法未调用任何参数时,是按升序排列的,也就是按字母的顺序排列,所以我们看到结果也是正确的。接下来,再看一个数字的数组排列的示例:
查了相关文档才知道,sort()
方法:如果省略参数,数组项会先根据toString()
函数将其值转换成字符串在进行比较,是按UNICODE进行比较的,然后根据这个进行排序。正如最前面的示例,"Jack"会排在"dog"前面。当数字进行排序的时候,"5"会出现在"10"和"22"之后,因为他们先会被转换为字符串,而“10”和“22”都比“5”要靠前。
如此一来,这不是最佳方案。幸好,sort()
方法可以接受一个比较函数compareFunction
作为参数,以便我们指定哪个值位于哪个值的前面。
如果指明了compareFunction
,那么数组会按照调用该函数的返回值进行排序。比较函数compareFunction
接收两个参数a
和b
,a
和b
是两个将要被比较的元素:
compareFunction(a,b)
返回的值小于0
:那么a
就小于b
,也就是说a
排在了b
的前面compareFunction(a,b)
返回的值大于0
: 那么a
就大于b
,也就是说a
排在了b
的后面compareFunction(a,b)
返回的值等于0
:那么a
就等于b
,也就是说a
和b
的位置保持不变
compareFunction(a,b)
函数:
如果要降序的话 只要调整返回值就可以。
compareFunction(a, b)
必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。