如何根据日期对对象数组进行排序

时间:2018-06-22 09:00:48

标签: javascript

我有一个要根据createDate排序的对象数组。

[{
    "TestName": "com.DPProgram",
    "Test": {
        "createDate": "2018-02-15T17:17:10.000+0530",
        "effectiveStartDate": "1900-01-01T00:00:00.000+0530",
        "effectiveEndDate": "2200-01-01T00:00:00.000+0530"
    }
}, {
    "TestName": "com.DPProgram",
    "Test": {
        "createDate": "2018-02-22T15:00:11.000+0530",
        "effectiveStartDate": "2017-12-22T00:00:00.000+0530",
        "effectiveEndDate": "2018-12-23T00:00:00.000+0530"
    }
}];

data = data.sort(function(a, b) {
  data = data.sort(function(a, b) {
    return (a[data.createDate] > b[data.createDate]) 
  });

但是它没有排序

https://jsfiddle.net/o2gxgz9r/51545/

3 个答案:

答案 0 :(得分:3)

您正在将日期作为字符串进行比较。在进行比较之前,您需要将它们转换为Date对象。

示例中的a[data.bean.createDate]语法也被破坏。您需要访问obj.Test.createDate

最后,请勿使用alert()进行调试,尤其是不要使用比字符串更复杂的数据类型。 console.log()更为准确,因为它不强制数据类型,并允许您遍历级别或对象/数组。

话虽如此,请尝试以下操作:

var data = [{
  "TestName": "com.DPProgram",
  "Test": {
    "createDate": "2018-02-15T17:17:10.000+0530",
    "effectiveStartDate": "1900-01-01T00:00:00.000+0530",
    "effectiveEndDate": "2200-01-01T00:00:00.000+0530"
  }
}, {
  "TestName": "com.callidus.quotaDP.Tests.DPProgram",
  "Test": {
    "createDate": "2018-02-22T15:00:11.000+0530",
    "effectiveStartDate": "2017-12-22T00:00:00.000+0530",
    "effectiveEndDate": "2018-12-23T00:00:00.000+0530"
  }
}, {
  "TestName": "com.Foo",
  "Test": {
    "createDate": "2018-02-07T15:00:11.000+0530",
    "effectiveStartDate": "2017-12-22T00:00:00.000+0530",
    "effectiveEndDate": "2018-12-23T00:00:00.000+0530"
  }
}];

data = data.sort(function(a, b) {
  var aDate = new Date(a.Test.createDate),
    bDate = new Date(b.Test.createDate);
  return aDate > bDate ? 1 : aDate < bDate ? -1 : 0;

});

console.log(data);

答案 1 :(得分:0)

var data = [{
    "TestName": "com.DPProgram",
    "Test": {
        "createDate": "2018-02-15T17:17:10.000+0530",
        "effectiveStartDate": "1900-01-01T00:00:00.000+0530",
        "effectiveEndDate": "2200-01-01T00:00:00.000+0530"
    }
}, {
    "TestName": "com.DPProgram",
    "Test": {
        "createDate": "2018-02-22T15:00:11.000+0530",
        "effectiveStartDate": "2017-12-22T00:00:00.000+0530",
        "effectiveEndDate": "2018-12-23T00:00:00.000+0530"
    }
},{
    "TestName": "com.DPProgram",
    "Test": {
        "createDate": "2018-02-25T15:00:11.000+0530",
        "effectiveStartDate": "2017-12-22T00:00:00.000+0530",
        "effectiveEndDate": "2018-12-23T00:00:00.000+0530"
    }
}];
console.log(_.sortBy(data, 'createDate'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore.js"></script>

答案 2 :(得分:0)

使用排序函数时,您将获得两个参数,它们是要操作的数据数组的元素,因此需要使用它们:

o/p
相关问题