js使用sort()函数对二维数组快速排序的写法

作者:admin    时间:2015-7-3 9:31:4    浏览:1847

    • js数组的排序方法有很多,冒泡法,插入法等等,不过对于数组的排序来说,js提供了一个非常实用的函数sort(),可以对数组进行自动排序,不需要我们手写函数代码进行排序。然而,当我需要排序的数据是一些二维数组时,sort()方法就不能再直接使用了,需要使用一点技巧。本文介绍如何使用js对二维数组进行快速排序的写法。

      假如我们有几组二维数组(姓名,年龄):

      'jack',20
      'tony',25
      'stone',26
      'mandy',23

      现在需要对他们按照年龄从小到大来排序,我们该怎样编写代码呢?

      1)、自定义对象属性:

      function Persion(name,age){
                  this.name=name;
                  this.age=age;
      }

      2)、声明数组,并赋值

      var objectList = new Array();
      objectList.push(new Persion('jack',20));
      objectList.push(new Persion('tony',25));
      objectList.push(new Persion('stone',26));
      objectList.push(new Persion('mandy',23));

      3)、按年龄从小到大排序

      objectList.sort(function(a,b){
      return a.age-b.age});

      4)、输出数组数据

      for(var i=0;i<objectList.length;i++){
                  document.writeln('<br />age:'+objectList[i].age+' name:'+objectList[i].name);
      }

      输出结果为:

      age:20 name:jack
      age:23 name:mandy
      age:25 name:tony
      age:26 name:stone

      完整代码如下:

      <script type="text/javascript">
              var objectList = new Array();
              function Persion(name,age){
                  this.name=name;
                  this.age=age;
              }
              objectList.push(new Persion('jack',20));
              objectList.push(new Persion('tony',25));
              objectList.push(new Persion('stone',26));
              objectList.push(new Persion('mandy',23));
              //按年龄从小到大排序
              objectList.sort(function(a,b){
                  return a.age-b.age});
              for(var i=0;i<objectList.length;i++){
                  document.writeln('<br />age:'+objectList[i].age+' name:'+objectList[i].name);
              }
      </script>

      可能遇到的问题

      “10,51,100,50”排序为什么是“10,100,50,51”?

      默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序。

      如何处理?参考如下例子:

      var arrDemo = new Array();
      arrDemo[0] = 10;
      arrDemo[1] = 50;
      arrDemo[2] = 51;
      arrDemo[3] = 100;
      arrDemo.sort(); //调用sort方法后,数组本身会被改变,即影响原数组
      alert(arrDemo);//10,100,50,51 默认情况下sort方法是按ascii字母顺序排序的,而非我们认为是按数字大小排序
      arrDemo.sort(function(a,b){return a>b?1:-1});//从小到大排序
      alert(arrDemo);//10,50,51,100
      arrDemo.sort(function(a,b){return a<b?1:-1});//从大到小排序
      alert(arrDemo);//100,51,50,10

      我要数组从大到小排序怎么写?

      <script type="text/javascript">
              var arrSimple2=new Array(1,8,7,6);
              arrSimple2.sort(function(a,b){
                  return b-a});
              document.writeln(arrSimple2.join());
              //解释:a,b表示数组中的任意两个元素,若return > 0 b前a后;reutrn < 0 a前b后;a=b时存在浏览器兼容
              //简化一下:a-b输出从小到大排序,b-a输出从大到小排序。
      </script>

      通过上述几个实例的学习,js对数组(包括二维数组)的排序就没有问题了。

javascript二维数组排序的更多相关文章

  1. JS二维数组排序组合

    需求是这样的:http://q.cnblogs.com/q/29093/ 这里简述一下: 现在有一个不确定长度的数组.比如:var temp=[["Fu","Hai&qu ...

  2. PHP二维数组排序(list_order)

    /** * 对二维数组进行排序 * 模拟 数据表记录按字段排序 * * <code> * @list_order($list, $get['orderKey'], $get['orderT ...

  3. PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)

    一.先看最简单的情况. 有两个数组: $arr1 = array(1, 9, 5); $arr2 = array(6, 2, 4); array_multisort($arr1, $arr2); pr ...

  4. php基础篇-二维数组排序 array_multisort

    原文:php基础篇-二维数组排序 array_multisort 对2维数组或者多维数组排序是常见的问题,在php中我们有个专门的多维数组排序函数,下面简单介绍下: array_multisort(a ...

  5. PHP二维数组排序(感谢滔哥)

    滔哥原创 /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\|| ...

  6. PHP 二维数组排序保持键名不变

    对二维数组指定的键名排序,首先大家想到的是array_multisort函数,关于array_multisort的用法我之前也写了一篇废话不多言,我们看个实例: <?php $data = ar ...

  7. 一个不错的PHP二维数组排序函数简单易用存用

    一个不错的PHP二维数组排序函数简单易用存用 传入数组,传入排序的键,传入排序顺序 public function array_sort($arr,$keys,$type='asc') { $keys ...

  8. PHP二维数组排序(感谢滔哥lvtao.net)

    滔哥原创 /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. / \\|| ...

  9. JS:二维数组排序和获取子级元素

    JS:二维数组排序和获取子级元素 1. 二维数组排序 1.按数值排序 var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]]; 如果我们要按每个子数组的第一列来排序要如 ...

随机推荐

  1. Spring Security4实例(Java config版)——ajax登录,自定义验证

    本文源码请看这里 相关文章: Spring Security4实例(Java config 版) -- Remember-Me 首先添加起步依赖(如果不是springboot项目,自行切换为Sprin ...

  2. 常用的DNS

    中国互联网络中心(推荐,安全又快速):1.2.4.8.210.2.4.8.101.226.4.6(电信及移动).123.125.81.6(联通)阿里DNS:223.5.5.5.223.6.6.6goo ...

  3. 微信小程序怎么用?线下商家最适合玩小程序

    随着微信小程序不断地释放新功能,许多行业越来越关注小程序,目前已经有不少餐饮和线下传统零售企业开始谋划利用好小程序.但是,线下商业有着复杂的场景,如何针对自己行业的特点和需求开发出属于自己的小程序,是 ...

  4. Work 2(演讲类) (2017.06.29)

  5. ASP.NET MVC5 怒跨 Linux 平台

    安装CentOS 安装Mono #安装yum工具包 yum -y install yum-utils #通过rpm添加Mono源 rpm --import "http://keyserver ...

  6. 【Canvas】canva实例-星空、日出的效果

    一.描述 模仿星空后黎明到来,日出的场景 二.代码 <!DOCTYPE html> <html> <head> <title></title> ...

  7. java泛型(整理)

    1 泛型基础知识 泛型需要理解两个关键点:1)类型擦除 2)类型转换 1)类型擦除 泛型有个很重要的概念,是类型擦除.正确理解泛型概念的首要前提是理解类型擦除(type erasure). Java中 ...

  8. 在CentOS7上部署OpenStack 步骤详解

    OpenStack作为一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,开放源代码项目的云计算管理平台项目.具体知识我会在后面文章中做出介绍,本章主要按步骤给大家演示在Cent ...

  9. Hexo博客添加SEO-评论系统-阅读统计-站长统计

    原文地址:→传送门 写在前面 在五月出捣腾了一把个人博客,但是刚开始只做了一些基础设置,套路也没摸清,基础安装篇请看hexo从零开始到搭建完整,里面讲到了基础工具的安装及blog项目的文件夹含义,以及 ...

  10. 用SSH解决大局域网反向端口转发问题

    本文作者Tony Lee,转载自FreeBuf.COM ​​自从家里换了联通光纤后,联通就在我家宽带出口前搭了一个路由器,我家也彻底沦为192.168.1.0/24段的局域网了,带来的问题就是在外网无 ...