JS数组的重排序方法/reverse()和sort()

在数组中存在着两个自身的重排序的方法:reverse()和sort()。固然,只有这两个方法还不足排序全部类型的数组,还能够定义一些比较函数来结合以上两个方法实现对数组的重排序。数组

  • reverse() 颠倒数组中元素的顺序
  • sort() 对数组的元素进行排序
  • 定义比较函数 实现对数值类型或者其valueOf()方法会返回数值类型的对象类型

reverse()

reverse() 方法会反转数组的数组项的排序,该方法会改变原来的数组,而不会建立新的数组。bash

代码实现及效果以下:函数

var value = [1,2,3,4,5,9,2];
var value1 = [a,b,c,d,e,b];
value.reverse();
value1.reverse();
alert(value);     //2,9,5,4,3,2,1
alert(value1);    //b,e,d,c,b,a
复制代码

输出的结果是反转了数组项的顺序,这个方法至关直观明了,可是不够灵活。ui

sort()

在默认的状况下,sort()方法按升序排列数组项——及最小的值在最前面,最大的值在后面。为了实现排序,sort()方法会调用每一个数组的toString() 转型方法,而后比较字符串,以确认如何排序。值得注意的是,即便数组中每一项都是数值,sort() 方法比较的都是字符串,说的更具体一点先将数组的元素都转换成字符串,而后是按照字符编码的顺序进行排序。编码

var value = [0,1,5,10,15];
value.reverse();
alert(value);     //0,1,10,15,5
复制代码

由例子可见,即便顺序原本是没有问题的,可是使用了sort() 方法也会根据字符串的结果改变原来的顺序。由于数值5虽然小于10,可是在进行字符串比较时,"5"位于"10"的后面,因此数组的顺序就被修改了。
使用sort() 方法在排列纯数值的数组的时候,并非什么好方案,这时候就要接收一个比较函数做为参数,使得能正确的排列数值的数组。spa

比较函数

比较函数接收两个参数,若是第一个参数应该位于第二个以前则返回一个负数,若是两个参数相等则返回0,若是第一个参数应该位于第二个以后则返回一个正数code

升序的代码以下所示:对象

function compare(value1,value2){
    if(value1 < value2){
        return -1;
    }else if(value1 > value2){
        return 1;
    }else{
        return 0;
    }
}
复制代码

这个函数能够适用于大多数的数据类型,只要将其做为参数传递sort() 方法便可,以下所示:排序

var values = [1,3,4,6,5,2,8];
values.sort(compare);
alert(values);     //1,2,3,4,5,6,8
复制代码

固然这个是升序的排列数组,想要实现降序,有两种方法。字符串

  • 一是能够直接对以上这个升序后的数组使用reverse() 方法,再输出结果,就已是降序的效果了,如何使用已经在前面讲过了,就不演示了;
  • 二是对比较函数作出一点修改,把返回值交换一下,交换了返回值就已经让更大的值排位在前了,也就是实现了降序。 代码以下:
function compare(value1,value2){
    if(value1 < value2){
        return 1;
    }else if(value1 > value2){
        return -1;
    }else{
        return 0;
    }
}
复制代码

简化版: emmm这个是一个更简单的比较函数,因为比较函数是经过返回一个小于零、大于零或等于零的值来影响排序结果,所以一个简单的减法操做就能够适当的处理中数值数组排序的状况。 升序的代码以下:

function compare(value1,value2){
    return value1 - value2;
}
复制代码

降序的代码以下:

function compare(value1,value2){
    return value2 - value1;
}
复制代码
相关文章
相关标签/搜索