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;而对于多种数据类型混合的数组还是老老实实的使用上面的方法。

时间: 2025-01-22 01:38:30

JavaScript基础之数组的重排序的相关文章

javaScript基础03数组..

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript基础练习03</title> 6 <script> 7 // 简单数据类型 Number String Boolean null undefined 8 9 // 复杂数据类型 对象,方法.,引用类型 10

JavaScript 基础回顾——数组

JavaScript是无类型语言,数组元素可以具有任意的数据类型,同一个数组的不同元素可以具有不同类型.数组的元素设置可以包含其他数组,便于模拟创建多维数组. 1.创建数组 在JavaScript中,创建数组可以使用两种方式 (1)使用 "[]" 创建. <script type="text/javascript"> var arr=[];  //创建空数组 var arr=['北京',0,true,'上海','代码里','www.daimali.com

JS数组之重排序方法

重排序方法 1. reserve() 反转 反转数组中元素的顺序. 2. sort() 重排序(默认升序) sort()方法可以对数组中的每一个元素进行排序,但是问题来了,即便数组元素全部都是数值类型,此方法依然会将所有元素先转换成字符串再进行升序排序. 因此,为了解决这个问题,sort()方法允许传入一个比较函数作为参数,实现升序或者降序. var arr = [0, 1, 5, 10, 15]; // reserve()反转. sort()升序(小 => 大) console.log(arr

Javascript 迭代法实现数组多条件排序

多条件排序可能有很多种思路,效率也各不相同,我的方法可能只适合自己用,毕竟目的是为了实现功能,所以采用了最笨的方法,不过效果还是很理想的,经过多次测试,6列1000行数据,平均排序时间大约是:28ms. 具体实现代码如下: function isArr(data) { return ({}).toString.call(data) == '[object Array]'; } function getIndex(arr) { var i = 0, len = arr.length keys =

JavaScript 基础(二)数组

字符串, JavaScript 字符串就是用'' 和""括起来的字符表示. 字符字面量, \n 换行, \t 制表, \b 退格, \r 回车, \f 进纸, \\ 斜杠,\' 单引号(') ,\" 双号(") \xnn 以十六进制代码nn 表示的一个字符(其中n为0~F) \unnnn以十六进制代码nnnn表示的一个Unicode字符. 字符串的特点,字符换一旦创建就不能改变,要变某个变量保存的字符串,首先要销毁原来的字符串,然后在用另一个包含字符 串填充该变量.

JavaScript基础 reverse() 数组倒置

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=ut

JavaScript基础——使用数组

Array对象提供存储和处理一组其他对象的一种手段.数组可以存储数值.字符串或其他JavaScript对象.创建JavaScript数组有几种不同的方法.例如,下面的语句穿件同样的驻足的3个相同的版本: var arr = ["one","two","three"]; var arr2 = new Array(); arr2[0] = "one"; arr2[1] = "two"; arr2[2] = &q

JavaScript 基础(六) 数组方法 闭包

在一个对象中绑定函数,称为这个对象的方法.在JavaScript 中,对象的定义是这样的: var guagua = { name:'瓜瓜', birth:1990 }; 但是,如果我们给瓜瓜绑定一个函数,就可以做更多的事情. var guagua = { name:'瓜瓜', birth:1990, age:function(){ var y = new Date().getFullYear(); return y - this.birth; } } guagua.age; // functi

javascript基础之数组对象

一.定义数组的方法: 定义了一个空数组: var myArray =new Array(); 指定有n个空元素的数组: var myArray=new Array(n); 定义数组并赋值: var myArray =[1,2,3]; 数组元素的使用: 数组名[下标]=值; 二.数组属性:length用法 数组对象.length; //返回数组长度 三.数组方法: concat();连接两个或更多的数组,并返回结果. var myArray=[1,2]; document.write(myArra