【问题标题】:Javascript/jQuery nested array sortJavascript/jQuery 嵌套数组排序
【发布时间】:2014-05-30 14:08:49
【问题描述】:

我有这样的数组:

var arr = [
    ["2013/09/09", 1, 2], 
    ["2013/12/31", 2, 5], 
    ["2014/12/30", 1, 4], 
    ["2013/04/17", 1, 1]
];

我需要根据每个子数组中存在的日期对该数组进行排序。

例如

var sorted = [
    ["2013/04/17", 1, 1], 
    ["2013/09/09", 1, 2], 
    ["2013/12/31", 2, 5], 
    ["2014/12/30", 1, 4]
];

【问题讨论】:

标签: javascript jquery


【解决方案1】:

如果您正在对大型数组进行排序,最好只进行一次日期转换, 而不是在排序例程的每一次微动中重复创建。

    function unaturalSort(arr){
        var T= arr.slice(0), L= T.length, i, itm, next;
        // create a timestamp for each element
        for(i= 0; i<L; i++){
            itm= T[i];
            next= T[i][0];
            T[i]= [+new Date(next), itm];
        }
        T.sort(function(a, b){
            return a[0]-b[0]
        });
        //remove the timestamps from the sorted array
        for(i= 0; i<L; i++){
            T[i]= T[i][1];
        }
        return T;
    }

    var A= [
        ["2013/09/09", 1, 2], ["2013/12/31", 2, 5], 
        ["2014/12/30", 1, 4],["2013/04/17", 1, 1]
    ];


    unaturalSort(A).join('\n'); 

 returned value: (String)
    2013/04/17, 1, 1
    2013/09/09, 1, 2
    2013/12/31, 2, 5
    2014/12/30, 1, 4

注意 - 如果您要重新排列现有数组,请跳过 slice()。

【讨论】:

    【解决方案2】:

    试试这个,

    var arr = [
        ["2013/09/09", 1, 2], 
        ["2013/12/31", 2, 5], 
        ["2014/12/30", 1, 4], 
        ["2013/04/17", 1, 1]
    ];
    
    var temp;
    
    for(var i=0;i<arr.length;i++)
    {
        for(var j=0;j<arr.length;j++)
        {
            var di = new Date(arr[i][0]);
            var dj = new Date(arr[j][0]);
    
            if(di < dj)
            {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      使用本机 sortparseInt,我相信我是其他答案中最简短的:

      function sortDate (a,b){
             return parseInt(a[0].split("/").join("")) - parseInt(b[0].split("/").join(""));
      }
      
      var arr = [
          ["2013/09/09", 1, 2], 
          ["2013/12/31", 2, 5], 
          ["2014/12/30", 1, 4], 
          ["2013/04/17", 1, 1]
      ];
      
      var result = arr.sort(sortDate)
      
      console.log(result);
      

      【讨论】:

        猜你喜欢
        • 2021-10-25
        • 1970-01-01
        • 2017-03-18
        • 1970-01-01
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        相关资源
        最近更新 更多