2017-02-28 4 views
1

2つの異なる種類のオブジェクトを含む配列があり、それぞれにキーが異なる独自の日付フィールドがあります。下記を参照してください:Javascript - 2つの日付プロパティーによるオブジェクトの配列の並べ替え

const array = [ 
    { id: 1, occurs_at: '2017-02-03T07:00:01.000Z' }, 
    { id: 2, occurs_at: '2017-02-03T10:00:01.000Z' }, 
    { id: 3, start: '2017-02-03T04:00:01.000Z' }, 
    { id: 4, start: '2017-02-03T06:00:01.000Z' }, 
]; 

私はそれらを昇順で取得しようとしていますが、解決策を見つけることができません。私は1つのプロパティに基づいて他のソートにLodashを使用しています。何かご意見は?

+0

どのキーを知る方法はありますか? 2つ以上の異なる日付キーがありますか?または、 'occur_at'と 'start'の2つの可能な日付キーはありますか?オブジェクトには日付とID以外のキーがありますか? – Shilly

+0

startとoccur_atは日付の唯一のキーですか? – baao

+0

@baaoが正しい。それらは唯一の可能なキーです。 – AHinson

答えて

5

希望のプロパティをテストし、true値を持つものだけを使用できます。

var array = [{ id: 1, occurs_at: '2017-02-03T07:00:01.000Z' }, { id: 2, occurs_at: '2017-02-03T10:00:01.000Z' }, { id: 3, start: '2017-02-03T04:00:01.000Z' }, { id: 4, start: '2017-02-03T06:00:01.000Z' }]; 
 

 
array.sort(function (a, b) { 
 
    return (a.occurs_at || a.start).localeCompare(b.occurs_at || b.start); 
 
}); 
 

 
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+2

優秀!これは機能します。ありがとう – AHinson

-3
array.sort(function(a, b) { 
    return new Date(b.occurs_at) - new Date(a.occurs_at); 
}); 
0

私はsortBy()pick()使用します:あなたは、各コレクションアイテムを持ってしようとしていることがわかっている場合は

const sorted = _.sortBy(array, i => new Date(
    _(i) 
    .pick(['occurs_at', 'start']) 
    .values() 
    .first() 
)); 

をいずれかoccurs_atかだstartプロパティ日付文字列は、pick()の両方を取得するために使用することができます。明らかに1つしか存在しないので、正しい値を持つオブジェクトが返されます。

この時点で、単一の日付値を持つオブジェクトであることがわかっているので、キーは気にしなくなりました。だからあなたはvalues()first()を使ってそれを得る。

関連する問題