2017-03-04 68 views
0

我有一個對象數組。我需要使用兩個條件進行分類。在兩個條件下排序的對象數組

[{ 
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 
}, ] 

我需要使用兩個條件對此進行排序。

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

但它沒有那種使用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

它與評估第一個三角洲並檢查是否使我們truthy,這neasb的價值要麼小於一個或大於一在這種情況下。如果該值爲零,則兩個狀態值相等,並評估該時間的下一個增量。然後返回結果。

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

很好的使用'||' - 我以前沒有想過在sort函數中這樣做,我認爲你已經得到了主要的排序(我懷疑OP還需要更多的解釋,以瞭解它是如何工作的) – nnnnnn

+0

僅供參考:'status:1'似乎是代碼中的最後一個,OP要求他們先來 – haxxxton

+0

@haxxxton You可以簡單地反轉表達式,使狀態1首先出現:b.status - a.status – ifadey