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

时间:2022-04-24
本文章向大家介绍JavaScript引用类型之Array数组的排序方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

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