今天继续总结一些其他的方法。我仔细回忆我从完全不懂JS到现在还在自学的这个过程,我回想当初看到JS真的是觉得几乎看不懂,上课的时候也觉得听的很吃力,对一些概念也很陌生。但是经过一段时间的沉淀,现在再看JS也似乎不那么可怕了,原先完全看不懂的一些概念似乎也不是不可攻破的。我体会到哪怕一个再难的概念,你一开始一定是很难吸收理解,但是你把这个概念隔段时间看个好几遍,我相信你一定会慢慢理解它的意思,而且一次比一次更深更清晰的理解。古人云,读书百遍,其义自见确实是有道理的。这是一些些自学路上自我体会的经验和感受在此记下,所以说很多东西还是要自己去尝试去体验才能悟出些什么,这些东西很宝贵,是通过时间,实践得来。
言归正传,先小结下JS中的重排序方法。数组中已经存在两个可以直接用来重排序的方法:reverse()和sort()。
reverse()方法会反转数组项的顺序,请看下面的例子
<span style="font-size:18px;">var values=[1,2,3,4,5];
values.reverse();
alert(values);</span>
但由于reverse()不够灵活,于是有了sort()方法。在默认情况下,sort()方法按升序排列数组项。为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到字符串,来确定如何排序。注意:即使数组中的每一项都是数值,sort()方法比较的也是字符串。如下所示:
<span style="font-size:18px;">var values=[0,1,5,10,15];
values.sort();
alert(values); //0,1,10,15,5</span>
因为这个方法比较的是字符串的大小而不是值的大小,所以这种排序方式也不是最佳的。因此sort()方法可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。
比较函数接收两个参数,如果第一个参数应该位于第二个参数之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数,以下就是一个简单的比较函数:
<span style="font-size:18px;"> function compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
}else{
return 0;
}
}</span>
这个比较函数可以适用于大多数数据函数,只要将其作为参数传递给sort()方法即可,如下面这个例子所示:
<span style="font-size:18px;">var values=[0,1,5,10,15];
values.sort(compare);
alert(values);</span>
而通过交换比较函数返回的值可以产生降序的排序效果
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()方法更快一些。注意:reverse()和sort()方法的返回值是经过排序之后的数组。
对于数值类型或者其valueOf()方法会返回数值类型的对象类型,可以使用一个更简单的比较函数。这个函数只要用第二个值减第一个值即可。
function compare(value1,value2){
return value2-value1;
}
var values=[0,1,5,10,15];
values.sort(compare);
alert(values);