码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript基础之数组的重排序

时间:2016-08-15 14:43:55      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:javascript   数组   重排列   

JavaScript基础之数组的重排序

 数组(Array)算是继Object之后我们最常用到的类型了。与其他语言不同的是,javascript数组的每一项可以保存任何类型的数据,并且数组的大小是可以动态调整的。

   JavaScript已经为我们提供了两个数组重排序的方法,reverse()和sort() 方法。

   其中reverse()方法会反转数组项的顺序。举个栗子:

var values = [18,4,56,1,"a","b","abc"];
values.reverse();
alert(values);    // abc,b,a,1,56,4,18

    这个例子直观的表现出 reverse()方法的作用,只是将数组的头变成尾,尾编程头,就像火车在站里掉头一样。但是没有实现我们想要的结果,此时sort()方法的作用就表现出来了。

var values = [18,4,56,1,"a","b","abc"];
values.sort();
alert(values);    // 1,18,4,56,a,abc,b

  我们发现使用sort()方法后,确实将数组中元素的位置打乱了,但是不是我们想要实现的从大到小来排列的。原来sort()方法会调用每个数组元素的 tostring()方法,然后比较得到的字符串,于是出现了上面的结果。但是如何去实现从小到大或者从大到小的顺序排列呢?因此sort()方法可以接受一个比较函数作为参数,以便我们指定哪个值位于哪个值前面。

 比较函数接受两个参数,如果第一个参数应该位于第二个参数的前面,则返回一个负数,如果第一个参数等于第二个参数则返回0,如果第二个参数应该位于第一个的前面则返回一个正数。下面是一个比较函数的例子:

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

这个比较函数可以适用于大多数数据类型,只需要将compare作为参数传给sort()方法即可;举个栗子如下:

var values = [18,4,56,1,"a","b","abc"];
values.sort(comapre);
alert(values);         //1,4,18,56,a,abc,b

我们发现输出的结果是按升序的方式排列的,那如果想要按照降序的方式排列,我们只需更改compare函数的返回值即可。

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

var values = [18,4,56,1,"a","b","abc"];
values.sort(compare);
alert(values);        //56,18,4,1,b,abc,a

我们发现compare函数的三个判断跟比大小差不多,而我们上小学的时候就知道比较两个数的大小用减法就可以了,那我们试一试让compare函数直接返回 value2 - value1 会发生什么:

function compare(value1, value2) {
   return value2 - value1;
}
var values = [18,4,56,1,"a","b","abc"];
values.sort(compare);
alert(values);        //56,18,4,1,a,b,abc

  诶,怎么只有数字按从大到小的方法排列,而字符串的顺序一点没变。既然是减法,那么肯定是只有对 number类型的值才有效。

  所以我们在对纯number类型的数组进行重排序的时候可以使用上面简写的方式,从大到小排列直接返回value2 -value1,从小到大排列,返回value1 - value2;而对于多种数据类型混合的数组还是老老实实的使用上面的方法。

本文出自 “Fcheng” 博客,请务必保留此出处http://fcheng.blog.51cto.com/10644114/1838024

JavaScript基础之数组的重排序

标签:javascript   数组   重排列   

原文地址:http://fcheng.blog.51cto.com/10644114/1838024

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!