按日期排序JSON对象数组 - Angular2

时间:2017-10-24 00:58:19

标签: javascript arrays json angular sorting

我正在尝试对Angular2中的对象数组进行排序。解释的最佳方式是提供代码示例:

var activity =  {
            SEQ_NO: -1,
            SIGNUP_NAME: "Testing Activity",
            SHORT_DESCRIPTION: "This activity min: 2, max: 25",
            EVENT_BEGIN_DATE: "2018/09/25",
            EVENT_END_DATE: "2018/09/25"
           };

数组中充满了如上所示的对象。我的目标是获取数组并根据日期对其进行排序。我还调用了一个转换日期函数,它接受数字日期并将其转换为可读格式:

convertDate(incomingDate) {
    var myDate = new Date(incomingDate);
	  var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
	  console.log(days[myDate.getDay()]);
	  var date = days[myDate.getDay()]+" "+(myDate.getMonth()+1)+'/'+myDate.getDate()+'/'+myDate.getFullYear();
    //alert(date);
	  return date;
  }

因此,此示例中显示的活动对象将转换为: Tuesday 9/25/2018

如何按日期对这些对象的数组进行排序?当我显示它们时,我想要按月显示它们。

先谢谢大家。

2 个答案:

答案 0 :(得分:0)

首先我会convert your date to a unix time因为那些已按月分类。

其次我只是sort your array by that number

因为你正在使用打字稿。

component.html

 <div *ngFor="let sorted of sortedArray$ | async">
    {{sorted.start}} 
 </div>

component.ts

  list: any[] = [{
    start: '2018/09/25',
    content: 'second'
  },{
    start: '2018/08/10',
    content: 'first'
  }];

  sortedArray$: Observable<any[]>;

  constructor(public navCtrl: NavController) {
    this.sortedArray$ = Observable.of(this.list)
    .map((data) => {
        data.sort((a, b) => {
            return new Date(a.start.getTime()) > new Date(b.start.getTime());
        });
        return data;
    });
  }

答案 1 :(得分:0)

当字符串日期的格式为yyyy / mm / dd时,可以正确排序而不进行转换。

list.sort(function (a, b) {
  a = a.EVENT_BEGIN_DATE;
  b = b.EVENT_BEGIN_DATE;
  if (a < b) {
    return -1;
  } else if (a > b) {
    return 1;
  }
  return 0;
});

然后您可以转换日期。