zoukankan      html  css  js  c++  java
  • javascript二维数组排序

    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对数组(包括二维数组)的排序就没有问题了。

  • 相关阅读:
    【BZOJ2599】[IOI2011]Race 树的点分治
    【BZOJ1787】[Ahoi2008]Meet 紧急集合 LCA
    【BZOJ1834】[ZJOI2010]network 网络扩容 最大流+最小费用流
    【BZOJ3012】[Usaco2012 Dec]First! Trie树+拓补排序
    【BZOJ2743】[HEOI2012]采花 离线+树状数组
    【BZOJ2946】[Poi2000]公共串 后缀数组+二分
    【BZOJ2157】旅游 树链剖分+线段树
    【BZOJ2661】[BeiJing wc2012]连连看 最大费用流
    【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
    【BZOJ4236】JOIOJI STL
  • 原文地址:https://www.cnblogs.com/LXYX/p/5375677.html
Copyright © 2011-2022 走看看