1.sort() 方法的带参和无参调用:
sort()方法对数组元素进行排序,参数可选。返回一个数组的引用,不会创建新的数组对象而是将原数组改变成排序后的数组。
- 无参调用:
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串以便进行比较。如果数组元素是数字的话会得到错的结果,这时需要使用有参的方法。 - 带参调用:
如果想要自己规定排序方式,就需要在sort()方法中提供一个比较函数,该函数要比较两个值即有两个形参a 和 b,函数执行时浏览器会将数组中的元素依次作为实参传入,返回一个用于说明这两个值的相对顺序的数字。sort()方法会根据函数返回值来进行数组元素的交换。返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若a 大于 b,则返回一个大于 0 的值。
换句话说,当函数返回值小于0时,a与b的顺序不变;返回值为0时,则表示两数相等,顺序也不变;返回值大于0时,a与b交换位置。
2.sort(sortby)方法的排序函数sortby();
- 常用的一些排序函数:
<script type="text/javascript">
//排序函数
function compare(a,b){
if(a>b){
return 1; //sort()中参数大于0,交换a b顺序,升序排列
}else if(a<b){
return -1; //sort()中参数小于0,a b顺序不变,升序排列
}
}
var arr = [2,0,6,3,8];
var newArr = arr.sort(compare); //此处调用比较函数,并将其返回值作为sort方法参数
document.write("升序排列后的数组为:"+newArr);
</script>
上边是很简单的一个比较函数,是按升序排列的,如果要按降序排列,只要将返回值进行交换即可。
下边这个和上边函数实现的功能一样,只是写法不一样:
<script type="text/javascript">
function compare(a,b){
return a-b; //如果a>b,返回值大于0,交换a b,升序排列
//return b-a; 如果b-a大于0,即b大于a则交换,较大的b 在前,降序排列
}
var arr = [2,1,3,4,0];
var newArr = arr.sort(compare);
document.write("升序排列后的数组:"+newArr);
</script>
以上两种只是排序函数中最简单常用的,都可以将数组中的元素排序。
下面的函数可以将元素按先奇后偶排序:
要将元素按照先奇后偶的顺序排列,则a b交换的条件为a是偶数b是奇数且a>b。有了排序的条件,就可以很容易写出比较函数。
<script type="text/javascript">
function compare(a,b){
if(a%2==0 && b%2==1){
return 1; //1.对偶数和奇数排序,先将全部奇数放在前边,偶数放在后边
}
if((a%2==1 && b%2==1 || a%2==0 && b%2==0 )&& a>b){
return 1; //2.分别对奇数和偶数进行从小到大的顺序排序
}
}
var arr = [2,1,3,4,0];
var newArr = arr.sort(compare);
document.write("升序排列后的数组:"+newArr);
</script>
排序结果为 1,3,0,2,4
最后一种是对字符数组进行不区分大小写将其按照Unicode 编码从大到小排列:
var arr = [A,b,a,B];
要实现这种排序的比较函数的条件为:当a.toString().toLowerCase()
<script type="text/javascript">
var arr = ["a","A","B","C","b"];
function compare(a,b){
if(a.toString().toLowerCase() < b.toString().toLowerCase()){
return -1;
}else{
return 1; //按编码从小到大排列
}
}
var newArr = arr.sort(compare);
document.write(newArr);
</script>
a.toString()方法会返回 a的字符串表达形式 “a”.
如果 a 是一个变量存储的为一个Number型数值 2,则 a.toString()方法会返回 该数值的字符串表达形式 “2”;
此处Array的toString()方法和类的toString()方法不同,Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。Arrays的toString方法是返回指定数组内容的字符串表示形式。
3.对sort(sortby)方法的理解:
sort()方法主要依靠其回调函数来进行排序,回调函数中需要两个参数,在执行sort()方法时会调用回调函数,这时会将调用sort()方法的数组中的元素作为实参两两依次作为回调函数实参传入,通过回调函数的条件进行比较得出一个返回值,将返回值作为sort()函数的参数来判断是否交换。
所以回调函数规定了排序的条件以及进行排序,而sort()方法是根据这个条件进行交换。所以sort()函数只执行一次,回调函数会依次两两传入实参。