标签: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 数组 重排列
原文地址:http://fcheng.blog.51cto.com/10644114/1838024