代码之家  ›  专栏  ›  技术社区  ›  Pawan

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

  •  1
  • Pawan  · 技术社区  · 7 年前

    我有一个对象数组,我正试图根据 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 回复  |  直到 7 年前
        1
  •  3
  •   Rory McCrossan Hsm Sharique Hasan    7 年前

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

    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);
        2
  •  0
  •   Parth Raval    7 年前

    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>
        3
  •  0
  •   GuyT    7 年前

    使用排序函数时,会得到两个参数,它们是正在操作的数据数组的元素,因此需要使用它们:

    data.sort(function(a, b) {
        return a.Test.createDate - b.Test.createDate;
    });