2011-08-04 276 views
1

如果我有一個具有屬性的對象數組,並且我想按特定屬性對對象進行排序,那麼我將如何能夠執行此操作?例如,假設我有一堆news對象,每個對象具有date屬性。如何使用對象屬性對對象數組進行排序

我將如何能夠按日期對JavaScript中的每個對象進行排序?

+0

這已被問了很多很多次。 –

回答

3

如果陣列是ARR:

arr.sort(function(a,b) { 
    return (a.date < b.date ? -1 : (a.date > b.date ? 1 : 0)); 
}); 
+0

對不起,你的意思是'日期'而不是'數據'? – locoboy

+0

是啊,我修好了 –

+0

這些外括號真的需要嗎? –

0

您需要將自己的功能傳遞給.sort(),這樣的事情:

someArray.sort(function(a, b) { 
    if (a.date < b.date) 
    return -1; 
    else if (a.date > b.date) 
    return 1; 
    return 0; 
}); 

你的功能只需要能夠比較給定任意兩個對象並返回負值或正值,具體取決於哪一個來自第一個或零,如果他們是平等的。 .sort()函數將負責其餘部分。

這意味着您可以對您喜歡的任何屬性進行排序,甚至(可選)爲第一個屬性相等的情況引入第二排序。您也可以通過否定您的返回值來控制升序與降序。

+0

糟糕,可能應該更多關注頂部的那條橫幅,告訴我另一個答案已經發布。噢,我會毫不猶豫地離開我的回答,因爲我和代碼一起給了一個簡短的解釋。 – nnnnnn

0

你可以提供一個sort function到陣列的一種排序方法:

// Sample data 
var newsArray = [ 
    {date: '2010/8/12'}, 
    {date: '2012/8/10'}, 
    {date: '2011/8/19'} 
]; 

// Sorting function 
function sortNewsArray(arr) { 
    return arr.sort(function(a, b) { 
     return new Date(a.date) - new Date(b.date); 
    } 
); 
} 

提供的日期字符串可以簡單地轉換爲日期這一點。如果沒有,只需重新格式化,以便它們可以在數據或排序功能中使用。

初始順序:

  1. 2010年8月12日
  2. 2012年8月10日
  3. 2011/8/19

排序順序:

  1. 2010/8/12
  2. 2011/8/19
  3. 2012/8/10
相關問題