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. 京东JOS API 接入使用笔记

    商户开设了京东店.淘宝店,最近打算使用京东物流,需要使用京东仓库(京东店的订单使用京仓发货,淘宝等其他店使用京东云仓)发货,所以得从自家的ERP与京东沧海(ECLP)API对接,实现收发存. 首先得在 ...

  2. Ambari安装之Ambari安装前准备(CentOS6.5)(一)

    优秀博客 <Ambari--大数据平台的搭建利器> Ambari安装前准备 (一)机器准备 192.168.80.144   ambari01 (部署Ambari-server和Mirro ...

  3. 玩玩微信公众号Java版之四:自定义公众号菜单

    序: 微信公众号基本的菜单很难满足个性化及多功能的实现,那么微信能否实现自定菜单呢,具体的功能又如何去实现么?下面就来学习一下微信自定义公众号菜单吧! 自定义菜单接口可实现多种类型按钮,如下: 1.c ...

  4. (转)sql union和union all的用法及效率

    1 熟悉union的相关操作 UNION指令的目的是将两个SQL语句的结果合并起来.从这个角度来看, 我们会产生这样的感觉,UNION跟JOIN似乎有些许类似,因为这两个指令都可以由多个表格中撷取资料 ...

  5. (转)css内边距与外边距的区别,精辟啊

    css内边距与外边距的区别 (2012-05-02 13:54:54) 转载▼ 标签: 杂谈 分类: css 本文也是网上看了后收藏的,忘了原地址(以后收藏文章得注意) 你真的了解margin吗?你知 ...

  6. 从零开始打jar包

    经常会头疼于一个jar包是如何制作的,包括maven的打包方式,springboot的打jar包的原理,jar包稍稍有错误就会完全无法运行.在网上折腾了很久终于有些思路和步骤,在这里做个笔记 本文大纲 ...

  7. 【网络】dns_probe_finished_nxdomain 错误

    解决方案: 谷歌浏览器地址栏输入 chrome://net-internals/#dns 清除 dns 缓存即可

  8. 【PHP】linux+php5.1.6+mysql5.0.2+apache2.0.55安装配置说明(转)

    linux+php5.1.6+mysql5.0.2+apache2.0.55安装配置说明:一.mysql5.0.2的安装配置过程及说明:1. #tar -zvxf mysql-5.0.2-alpha. ...

  9. 浅析python 的import 模块(转)

    摘要: 学习python有几天了,对import一直不是很清楚,和C里面的include是否一样,重复引入有问题么?搜索路径是怎样的?整理解决下我的疑问. 一 模块的搜索路径 模块的搜索路径都放在了s ...

  10. 关于解决mysql数据库乱码的问题

    最近在开发的过程中频繁的使用到了mysql'这款数据库,mysql的中文乱码问题一直让人头疼.以前遇到过几次,但是都一不小心就解决了,这次终于明白到底是怎么回事了.可能我下面手的这种解决方案只适合于我 ...