JavaScript引用类型之Array数组的排序方法

点点圈 提交于 2020-03-26 02:33:17

数组中已经存在两个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;
}

学以致用,亘古不变的真理!

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!