2009-12-22 49 views
2

如何對此數組進行排序?如何在JavaScript中對此數組進行排序?

[ 
    {id : 1, start : 60, end : 120}, 
    {id : 2, start : 100, end : 240}, 
    {id : 3, start : 700, end : 720} 
] 

UPDATE: 所以,如果我的數組看起來像這樣,我可以排序它的基礎上開始的價值?

[{ 
    1:{start : 60, end : 120}, 
    2:{start : 100, end : 240}, 
    3:{start : 700, end : 720} 
}] 
+5

按什麼排序? .. – 2009-12-22 20:03:18

回答

17

你在那裏有一個對象數組。您必須指定如何對其進行分類。

無論如何,你可以使用sort方法:

[ 
     {id : 1, start : 60, end : 120}, 
     {id : 2, start : 100, end : 240}, 
     {id : 3, start : 700, end : 720} 
    ] 

A.sort(function(a, b){ 
    return a.start-b.start || a.end-b.end || a.id-b.id; 
}); 
+11

你甚至不需要命名比較函數。如果您不需要在其他地方進行比較,則可以將其用作匿名函數。 data.sort(function(a,b){return a.id -b.id;}; – selfawaresoup 2009-12-22 20:06:30

+2

是的,但是我總是儘量避免使用匿名函數,因爲它們讓代碼更難讀取 - 程序員花更多的時間閱讀代碼比寫它:) – Seb 2009-12-22 20:20:41

+0

+1 Seb + 1 Techpriester。 – 2009-12-22 20:22:48

1

你可能想辦法,可能 具有相同的初始值對象進行排序一個僞陣列對象。但是,您可以將該對象轉換爲真實數組,然後對其進行排序,然後再轉換回來:

var originalArray = [{ 
    1:{start : 60, end : 120}, 
    2:{start : 700, end : 720}, 
    3:{start : 100, end : 240} 
}]; 
var pseudoArray = originalArray[0]; 
var arrayToSort = []; 
for (var key in pseudoArray) { 
    arrayToSort.push(pseudoArray[key]); 
} 
arrayToSort.sort(function(left, right) { 
    return left.start - right.start || left.end - right.end; 
}); 
var resultPseudoArray = {}; 
for (var i = 0; i < arrayToSort.length; i++) { 
    resultPseudoArray[i + 1] = arrayToSort[i]; 
} 
var resultArray = [resultPseudoArray]; 
0

其實現在你從數組:

var data = [{id : 1, start : 60, end : 120}, {id : 2, start : 100, end : 240},{id : 3, start : 700, end : 720}]; 

function sortByStart(a, b){ 
    return a.start - b.start; 
} 

data.sort(sortByStart); 
相關問題