如何在数组中对日期对象进行排序?

时间:2015-11-14 02:25:34

标签: javascript jquery arrays sorting

我想对对象数组进行排序。我的对象中有日期我想对对象的日期进行排序

我用这个答案来解决我的问题 why array is not sorted in javascript in increasing date or decreasing date?

但是当使用此解决方案时,它无效。

我进行ajax调用并从服务器存储中获取数据。但是数据 2000 ,因此很难检查数据是否排序。

所以我会告诉你数据不是排序的证据。

  • 查看对象 7 2014年7月24日星期四
  • 查看对象 10 2014年7月28日星期一
  • 查看对象 67 2015年4月20日星期一
  • 查看对象 69 2013年12月18日星期三

https://jsfiddle.net/rxaLutgn/6/

function sort_by(field, reverse, primer) {

            var key = primer ?
                function (x) {
                    return primer(x[field])
                } :
                function (x) {
                    return x[field]
                };

            reverse = !reverse ? 1 : -1;

            return function (a, b) {
                a = new Date(key(a)), b = new Date(key(b));
                return reverse * (a-b);
            }
        }

关于这个问题的任何更新。下面的回答不起作用

2 个答案:

答案 0 :(得分:0)

如果您期望所有日期,该功能正常。查看您的数据有一些无效日期,例如" - "

如果您无法修改数据或期望确定日期,那么您需要修改您的功能以执行此类操作(或以某种方式按照您的喜好处理它)

function sort_by(field, reverse, primer) {

        var key = primer ?
            function (x) {
                return primer(x[field])
            } :
            function (x) {
                return x[field]
            };

        reverse = !reverse ? 1 : -1;

        return function (a, b) {
            a = new Date(key(a))=='Invalid Date'?0:new Date(key(a));
b = new Date(key(b))=='Invalid Date'?0:new Date(key(b));
            return reverse * (a-b);
        }
    }

https://jsfiddle.net/rxaLutgn/21/< - 看看这里插入严重排序以限制数据量的对象

答案 1 :(得分:0)

这是一个有效的解决方案,我没有像你那样包含底漆。但实施它应该很容易。

$.ajax({
url: "https://dl.dropboxusercontent.com/s/3v7ya481187k8gf/a.json?dl=0",
}).done(function(data) {
    var arr;
    var _key =  "Expected_Payment_Date__c";//"akritiv__Promise_Date__c",
    var _reverse = true;
    arr=JSON.parse(data);
    arr.sort(function(a,b){
        var keyA = Date.parse(a[_key]);
        var keyB = Date.parse(b[_key]);
        var _rev = _reverse ? -1 : 1;

        if(keyA < keyB) return _rev * -1;
        if(keyA > keyB) return _rev * 1;
        return 0;
    });
    console.log(arr);
});