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自学手记——泛型

    泛型在集合中的应用 泛型在集合经常能看到,有两个好处:1.把运行时出现 的问题提前至了编译时:2.避免了无谓的强制类型转换. 用法:两边泛型的类型必须相同,可允许一边不写,只是为了兼容性,并不推荐. ...

  2. python新手之2变量

    变量 变量是将储存的值保存在内存中.当声明一个变量的时候会在内存中开辟一个储存内容的位置. 基于变量的数据类型,解释器分配内存空间并决定储存的内容.因此我们可以通过变量分配不同的数据类型,可以在变量中 ...

  3. 次小生成树学习+例题 poj 1679 The Unique MST

    次小生成树学习: 顾名思义,次小生成树,就是将图的所有生成树排序后,权值第二小的生成树. 次小生成树的朴素求法是很好想的,即首先求出最小生成树,之后枚举最小生成树中的所有边,将当前枚举的边" ...

  4. Python之__loader__

    主要引自:http://stackoverflow.com/questions/22185888/pythons-loader-what-is-it What is __loader__? __loa ...

  5. 20170714_js闭包变量重置

    <html> <body> <script> function createFunctions(){ var result = new Array(); for ( ...

  6. React-native初体验(安卓篇)

    本篇文章主要包括两方面,如何从0开始把RN(react-native)项目整合进入现有Android项目,以及我们做的第一个RN的上线项目遇到的一些坑. 初次做RN项目,我们选择做了一个逻辑相对简单的 ...

  7. laravel数据库查询返回的数据形式

    版本:laravel5.4+ 问题描述:laravel数据库查询返回的数据不是单纯的数组形式,而是数组与类似stdClass Object这种对象的结合体,即使在查询构造器中调用了toArray(), ...

  8. JavaScript中的几种继承方式对比

    转自:http://blog.csdn.net/kkkkkxiaofei/article/details/46474069 从’严格’意义上说,JavaScript并不是一门真正的面向对象语言.这种说 ...

  9. FillConsoleOutputAttribute 函数--指定区域填充控制台输出属性

    FillConsoleOutputAttribute函数 来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ms682663(v= ...

  10. MQ通道搭建以及连通性检查

    场景:项目开发中使用的mq中间件一直不太熟悉,遇到问题就需要问人,公司的同事也不怎么爱搭理,弄的好受伤!不熟悉的时候只是感觉好难,逼的没办法,好好研究下,发现里面的过程也没想象中的难, 经过一番研究, ...