2017-03-04 10 views
0

私はオブジェクトの配列を持っています。私は2つの条件を使用してそれをソートする必要があります。2つの条件で並べ替えるオブジェクトの配列

[{ 
id: 412, 
start_date: 1488479400, 
status: 1 
}, { 
id: 560, 
start_date: 1499451100, 
status: 0 
}, { 
id: 112, 
start_date: 1499091200, 
status: 0 
}, { 
id: 512, 
start_date: 1488474500, 
status: 1 
}, { 
id: 750, 
start_date: 1483473100, 
status: 1 
}, { 
id: 123, 
start_date: 1499106600, 
status: 0 
}, ] 

2つの条件を使用してこれを並べ替える必要があります。

  1. ステータス1を持つすべてのオブジェクトは、日付が一次、すなわち、最高の日付降順でなければならない
  2. 最初に来るべきです。ここで

が期待される出力

[{ 
id: 750, 
start_date: 1483473100, 
status: 1 
}, { 
id: 512, 
start_date: 1488474500, 
status: 1 
}, { 
id: 412, 
start_date: 1488479400, 
status: 1 
}, { 
id: 112, 
start_date: 1499091200, 
status: 0 
}, { 
id: 123, 
start_date: 1499106600, 
status: 0 
}, { 
id: 560, 
start_date: 1499451100, 
status: 0 
}, ] 

何私が試したことは、データに配列を割り当てthis answer

を踏襲し、その後

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

だが、それは使用してソートしませんでした開始日

Here's my Fiddle

+0

'b.start_date()'それは機能しません。 –

+1

日付の書式はあなたのフィドルでは同じではありません(実際、フィドルではおそらく期待通りのことをしていません。*引用符なしの '01-01-2017' *は数字-2017(1 - 1 - 2017)あなたの実際のデータはあなたの質問に示されているように 'start_date'を持っていますか? – nnnnnn

答えて

3

あなたは、ソート基準のチェーンアプローチでArray#sortとソート機能を使用することができます。直接EPOCH timeを使用できます。

これは最初のデルタを評価して、私たちが真実かどうかを確認するのに苦労します。その場合、値は1より小さいか、この場合は1より大きいかどうかを確認します。値がゼロであれば、両方の状態値が等しくなり、時間の次のデルタが評価されます。その後、結果が返されます。

delta  delta 
status start_date comment 
------ ---------- -------------------------- 
< 0     sort by status only to top 
    0  evaluate  sort by start_date as well 
> 0     sort by status only to bottom 

var array = [{ id: 412, start_date: 1488479400, status: 1 }, { id: 560, start_date: 1499451100, status: 0 }, { id: 112, start_date: 1499091200, status: 0 }, { id: 512, start_date: 1488474500, status: 1 }, { id: 750, start_date: 1483473100, status: 1 }, { id: 123, start_date: 1499106600, status: 0 }]; 
 

 
array.sort(function (a, b) { 
 
    return b.status - a.status || b.start_date - a.start_date; 
 
}); 
 

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

+0

' || 'をうまく使う - 私は以前にソート関数でそれを行うとは考えていませんでした。 (私はOPの動作についてもう少し説明が必要だと思う) – nnnnnn

+0

FYI: 'status:1'はコード内で最後に来るようだが、OPは彼らに最初に来るように頼んだ。 – haxxxton

+0

@haxxxton b.status - a.status – ifadey

関連する問題