2013-05-08 80 views
3
var data = [{ 
    "priority": "1", 
    "date": "01.03.2013", 
    "title": "Yeah hi" 
}, { 
    "priority": "2", 
    "date": "", 
    "title": "Another title" 
}, { 
    "priority": "2", 
    "date": "22.12.2013", 
    "title": "Foo" 
}, { 
    "priority": "1", 
    "date": "10.04.2013", 
    "title": "Hey there" 
}, { 
    "priority": "2", 
    "date": "15.08.2013", 
    "title": "Hello world" 
}, 
... 
] 

我有一個多維數組,我想以複雜的方式對它進行排序。按多個條件排序多維數組

  1. 第一排序依據「優先級」 - 優先級最高的第一
  2. 然後排序都與「日期」相同的優先級的項目 - 今天附近的下一個日期第一(只有在將來的日期)。如果一件物品沒有日期,那就把它放在最後。
  3. 排序具有相同日期的所有物品(和所有沒有日期)的「標題」 - 按字母順序

的第一步是與data.sort(沒問題),但是我不打算這樣做那。怎麼做?

+0

可能重複:http://stackoverflow.com/questions/3886165/javascript-sort-multidimensional-array – 2013-05-08 07:21:45

+0

這將是一個重複的,如果我只是想按優先級排序。但這不是我的問題...... – 2013-05-08 07:38:46

+1

雖然這是相同的_principle_ - 你寫你自己的小比較函數,根據所有的標準比較兩個元素,直到它可以決定哪一個比另一個「小」(或找出最後被認爲是平等的)。 – CBroe 2013-05-08 08:06:50

回答

5

一個可能的解決

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

你應該改變你的日期字段是某種磐正或未便(你可以自己解決這個問題)。

演示:http://jsbin.com/adosuh/1/edit