2013-10-20 142 views
0

我想排序日期列上的多維數組。每行中的第一個日期是開始日期,第二個日期是結束日期。我想根據開始日期以升序對行進行排序。Javascript Sorting Multidimensional Array

的數據結構是:

data = [["p1aprd", "Monthly", "PRD", "Date {Wed Nov 06 2013 01:27:00 GMT-0800 (Pacific Daylight Time)}", "Date {Thu Nov 07 2013 01:28:00 GMT-0800 (Pacific Daylight Time)}", "2"], 
     ["p1aprd", "Monthly", "PRD", "Date {Tue Nov 05 2013 01:29:00 GMT-0800 (Pacific Daylight Time)}", "Date {Wed Nov 06 2013 01:29:00 GMT-0800 (Pacific Daylight Time)}", "2"], 
     ["p1aprd", "Monthly", "PRD", "Date {Mon Nov 04 2013 01:31:00 GMT-0800 (Pacific Daylight Time)}", "Date {Thu Nov 14 2013 01:31:00 GMT-0800 (Pacific Daylight Time)}", "2"], 
     ["p1aprd", "Monthly", "PRD", "Date {Mon Nov 04 2013 01:00:00 GMT-0800 (Pacific Daylight Time)}", "Date {Thu Nov 14 2013 01:38:00 GMT-0800 (Pacific Daylight Time)}", "2"]]; 

我想要的功能:

data.sort((function(index){ 
return function(a, b){ 
    return (a[index] === b[index] ? 0 : (a[index] < b[index] ? -1 : 1)); 
};})(4)); 

alert(data); 

我想在這裏提出的所有可能的解決方案,但沒有運氣。我可能忽略了一些簡單的錯誤。任何幫助真的很感激。

+1

你有一個二維數組存在,而不是對象的數組的任何原因? –

+0

這個數組來自一些其他的函數調用,我沒有任何控制。如果我必須將其轉換爲對象並重構數組,有沒有我可以使用的任何示例? – Kiran

回答

1

您的代碼存在兩個問題: 1.您正在比較日期字符串而不是日期。 2.你逝去的4,而開始日期的指數是3

試試這個:

function getDateFromString(str){ return new Date(str.match(/\{(.*) \(/)[1]); } 

data.sort((function(index){ 
    return function(a, b){ 
     a = getDateFromString(a[index]); 
     b = getDateFromString(b[index]); 
     return a - b; 
    }; 
})(3)); 

alert(data);