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. Java ee el表达式

    以前在开发的时候,偶尔会遇到jsp页面不支持el表达式的情况. 这个的原因是因为El功能被关闭了, 当时的解决办法是关闭忽略.isELIgnored 设设置 但是为什么有时候不用设置也可以了呢.发现原 ...

  2. Akka(13): 分布式运算:Cluster-Sharding-运算的集群分片

    通过上篇关于Cluster-Singleton的介绍,我们了解了Akka为分布式程序提供的编程支持:基于消息驱动的运算模式特别适合分布式程序编程,我们不需要特别的努力,只需要按照普通的Actor编程方 ...

  3. Spring Boot 系列(二)单元测试&网络请求

    实际开发中,Junit单元测试是必不可少的.在spring-boot 中可以通过测试模块(spring-boot-starter-test)快速使用单元测试功能. 开始 本示例在 spring boo ...

  4. OCP 11G 实验环境安装文档 ( RedHat5.5 + Oracle11g )

    RedHat5.5 linux下Oracle11g软件安装 一.配置虚拟机 为了创建和配置虚拟机,你需要添加硬件设备如磁盘和cpu,在你开始安装之前,创建一个windows目录作为存放虚拟机的目录 目 ...

  5. ES6正则表达式扩展

    前面的话 正则表达式是javascript操作字符串的一个重要组成部分,但在以往的版本中并未有太多改变.然而,在ES6中,随着字符串操作的变更, ES6也对正则表达式进行了一些更新.本文将详细介绍ES ...

  6. 【css】过度效果

    http://kissygalleryteam.github.io/girlLink/doc/demo/index.html

  7. springboot用thymeleaf模板的paginate分页

    本文根据一个简单的user表为例,展示 springboot集成mybatis,再到前端分页完整代码(新手自学,不足之处欢迎纠正): 先看java部分 pom.xml 加入 <!--支持 Web ...

  8. Java综合题目

    分支, 循环, 数据类型 1, 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 2, 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13... ...

  9. 奇怪的道路[JXOI2012]

    题目描述 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n.m条道路连接在这些城市之间,每条道路将两个城 ...

  10. WordCount去除标点方法之一

    package com.bw.day10;import java.io.IOException;import java.util.StringTokenizer;import org.apache.h ...