数组中已经存在两个JavaScript给我们定义好的重排序的方法:reverse()和sort()方法,下面来简单分析下:
1、reverse() 用于反转数组项的顺序,代码如下:
<script> var colors=[1,2,3,4,5]; colors.reverse(); alert(colors.toString()); //输出:5,4,3,2,1 </script>
这里数组的初始顺序是1、2、3、4、5,调用数组的reverse()方法后,其值顺序变为5、4、3、2、1
2、sort()
用法:arrayobj.sort(sortfunction)
参数说明:
(1)arrayObj 必选项,任意 Array 实例。
(2)sortFunction 可选项,是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。
注意:sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。
如果为 sortfunction 参数提供了一个函数,那么该函数必须为下列返回值之一:
负值,如果所传递的第一个参数比第二个参数小。
零,如果两个参数相等。
正值,如果第一个参数比第二个参数大。
没有给sort()方法指定排序规则的代码如下:
<script> //使用方法:arrayobj.sort(sortfunction) var colors=["张三","李四","王五",6,"stephen curry","Kevin Durant"]; colors.sort(); //没有给sort()方法传递排序方法sortfunction。所以sort()方法会将colors数组里面的每一项调用toString()方法,然后对所有的数组项进行ASCII码值比较,
//返回排序后的结果,最左边的是ASCII值最小的数组项,最右边的是ASCII最大的数组项 alert(colors.toString()); //输出:6,Kevin Durant,stephen curry,张三,李四,王五 </script>
给sort()方法指定排序规则 代码如下:
<script> //使用方法:arrayobj.sort(sortfunction) var arr=[6,1,7,3,6,5]; arr.sort(compare); alert(arr.toString()); //输出:1,3,5,6,6,7 //排序规则 function compare(value1,value2) { if(value1>value2){ return 1; } else if(value1<value2){ return -1; } else{ return 0; } } </script>
上面只是一种写法,而且个人认为不是很好,下面是其他的写法:
<script> var numArr = new Array(12,23,1,4,23,34,2,5); numArr.sort(function compare(a,b){return a-b;}); for (var i = 0; i<numArr.length; i++) { document.write(numArr[i] +"<br>"); } </script>
降序排序
<script> var numArr = new Array(12,23,1,4,23,34,2,5); numArr.sort(function compare(a,b){return b-a;}); for (var i = 0; i<numArr.length; i++) { document.write(numArr[i] +"<br>"); }
<script> var numArr = new Array(12,23,1,4,23,34,2,5); numArr.sort(new Function("a","b","return a-b;")); for (var i = 0; i<numArr.length; i++) { document.write(numArr[i] +"<br>"); } </script>
<script> function compare(a,b) { return a-b; } var numArr = new Array(12,23,1,4,23,34,2,5); numArr.sort(compare); for (var i = 0; i<numArr.length; i++) { document.write(numArr[i] +"<br>"); } </script>
<script> var compare = function(a,b) { return a-b; } var numArr = new Array(12,23,1,4,23,34,2,5); numArr.sort(compare); for (var i = 0; i<numArr.length; i++) { document.write(numArr[i] +"<br>"); } </script>
写法有很多,所以喜欢那种就用哪种吧!
现在学会了sort的用法,下面就用它实现数组的升序和降序方法,并封装一下,代码如下:
/* @param arr ---需要排序的数组 @return ---返回值为排序完的数组 功能:对数组进行升序排序 */ function asc(arr){ arr.sort(function(a,b){ return a-b; }); return arr; } /* @param arr ---需要排序的数组 @return ---返回值为排序完的数组 功能:对数组进行降序排序 */ function desc(arr){ arr.sort(function(a,b){ return b-a; }); return arr; }
学以致用,亘古不变的真理!