【问题标题】:How to sort an array of object with two dates?如何对具有两个日期的对象数组进行排序?
【发布时间】:2021-01-15 17:59:03
【问题描述】:

我的数组:

var arr = [
  {id: 1, start_date:'2020-04-13', end_date: '2020-07-05'},
  {id: 2, start_date:'2020-04-13', end_date: '2020-07-16'},
  {id: 3, start_date:'2020-05-25', end_date: '2020-12-31'},
  {id: 4, start_date:'2020-07-01', end_date: '2020-12-31'},
  {id: 5, start_date:'2020-07-01', end_date: '2020-08-02'}
];

我想根据 start_date 和 end_date 对这个数组进行排序。它应该工作的方式是 start_date 按降序排列,即日期越晚,它在数组中的位置越高。但是,如果有多个 start_dates 包含相同的日期,那么它应该查看 end_date。在这种情况下,end_date 应该按升序排列。

我正在尝试以这种格式获取数组:

var new_arr = [
  {id: 5, start_date:'2020-07-01', end_date: '2020-08-02'},
  {id: 4, start_date:'2020-07-01', end_date: '2020-12-31'},
  {id: 3, start_date:'2020-05-25', end_date: '2020-12-31'},
  {id: 1, start_date:'2020-04-13', end_date: '2020-07-05'},
  {id: 2, start_date:'2020-04-13', end_date: '2020-07-16'}

];

【问题讨论】:

    标签: javascript node.js arrays sorting object


    【解决方案1】:

    您可以使用Array.sort 方法来实现它。

    var arr = [
      {id: 1, start_date:'2020-04-13', end_date: '2020-07-05'},
      {id: 2, start_date:'2020-04-13', end_date: '2020-07-16'},
      {id: 3, start_date:'2020-05-25', end_date: '2020-12-31'},
      {id: 4, start_date:'2020-07-01', end_date: '2020-12-31'},
      {id: 5, start_date:'2020-07-01', end_date: '2020-08-02'}
    ];
    
    var result = arr.sort((a, b) => {
      if (a.start_date < b.start_date) {
        return 1;
      } else if (a.start_date === b.start_date) {
        if (a.end_date > b.end_date) {
          return 1;
        } else {
          return 0;
        }
      } else {
        return 0;
      }
    });
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-19
      • 2020-12-20
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 2012-02-08
      • 2021-12-11
      • 1970-01-01
      相关资源
      最近更新 更多