2017-10-24 13 views
0

Angular2でオブジェクトの配列をソートしようとしています。説明する最良の方法は、コード例を与えることである。JSONオブジェクトの配列を日付で並べ替える - 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" 
 
      };

アレイは、上記見ようなオブジェクトが充填されています。私の目標は配列を取って日付に基づいてソートすることです。 Tuesday 9/25/2018

:だから、この例に示されている活動オブジェクトはに変換されます

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

:私はまた、数値、日付を取り、読みやすい形式になっコンバート日付関数を呼び出します

これらのオブジェクトの配列を日付でソートするにはどうすればよいですか?私はそれらを表示するとき、私は数ヶ月の順序でそれらを表示したいと思います。

ありがとうございました。

+0

変換前にソートできますか(ソート後に変換する)?これを行う場合は、すでにソート可能な形式になり、キーに対して.sort()を使用するだけで済みます。 – Froast

+0

いつでもソートできます。簡単な場合に備えて変換部分を提供しました! –

+0

開始日または終了日に変換しますか?昇順または降順? – Froast

答えて

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; 
}); 

日付を変換することができます。

+0

形式的にはyyyy/mm/ddの形式を仮定していますが、文字列の比較は悪い考えです。たとえば、これを読んでいる別の人が '' 2018/10/17 '>' 2018/2/17 '// false'のように先行ゼロを使用していないとします。 'Date'や日付ライブラリで作業する方が良いでしょう。 – stealththeninja

+0

@stealththeninja真実です。そして、私はある時点で文字列が日付になると思うので、あるステップではソートに使用でき、次は必要に応じて人間が読める文字列に変換できます。 – Froast

0

最初に私はconvert your date to a unix timeを既に月別に並べ替えています。

第2に、私は単純にsort your array by that numberです。

あなたはtypescriptを使用しています。

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; 
    }); 
    } 
関連する問題