2012-06-07 220 views
0

我有對象的類似如下的數組:如何按數字升序對對象數組進行排序?

var array = { 
    "112" : { 
      "id": "3", 
      "name": "raj" 
    }, 
    "334" : { 
      "id": "2", 
      "name": "john" 
    }, 
    "222" : { 
      "id": "5", 
      "name": "kelvin" 
    } 
} 

現在我想在id升序排序的數組,然後將其在陣列恢復。我嘗試使用sort(),但無法做到這一點。請幫助如何做到這一點,當我顯示從數組中的數據它來排序。

+0

看看這個真棒網站:http://www.sorting-algorithms.com/ – Mageek

+0

你的代碼有語法錯誤,請解決它們。 '112 ='應該是'122:',whyle'raj',其他的應該是字符串,除非它們是變量,但我想它們不是。 – MaxArt

+0

這是對象的對象,而不是對象的數組。 – jbabey

回答

0

這不是一個數組,它是一個對象(或者如果它不是語法錯誤(=應該是:))。它沒有訂單。

您可以改爲使用數組(使當前屬性名稱爲子對象上的鍵的值)。

或者,您可以使用for循環來構建鍵名稱的數組,然後對其進行排序,並將其作爲按順序訪問對象的基礎。

0

這是一個對象,但你可以數組排序ILKE這樣的:

工作演示:http://jsfiddle.net/BF8LV/2/

希望這有助於,

代碼

function sortAscending(data_A, data_B) 
{ 
    return (data_A - data_B); 
} 
var array =[ 9, 10, 21, 46, 19, 11] 
array.sort(sortAscending) 
alert(array);​ 
0

的JavaScript根據定義,對象是無序的。語言規範甚至不保證,如果你連續兩次遍歷一個對象的屬性,它們將在第二次以相同的順序出現。

如果您需要訂購物品,請使用數組和Array.prototype.sort方法。

0

假設你的意思是你的代碼對象的數組,即:

var unsortedArray = [ 
    { id: 3, name: "raj" }, 
    { id: 2, name: "john" }, 
    { id: 5, name: "kelvin" } 
]; 

然後你就可以通過ID通過傳遞函數的Array.Sort(排序)來比較的id:

var sortedArray = unsortedArray.sort(function(a, b) { 
    return a.id - b.id 
}); 

正如其他人指出的,你擁有的是一個包含對象而不是數組的對象。

0

沒有多少人知道,Array.sort可以其他類型的對象可以使用,但必須有一個length屬性:

array.length = 334; 
Array.prototype.sort.call(array, function(a, b) {return a.id - b.id;}); 

不幸的是,這並不能很好的工作,如果你的「陣列」是充滿了像你一樣的「洞」。

0
var array = { 
    "112" : { 
     "id": "3", 
     "name": "raj" 
    }, 
    "334" : { 
     "id": "2", 
     "name": "john" 
    }, 
    "222" : { 
     "id": "5", 
     "name": "kelvin" 
    } 
} 
var sortedObject = Array.prototype.sort.apply(array); 

result: 
{ 
    "112": { 
     "id": "3", 
     "name": "raj" 
    }, 
    "222": { 
     "id": "5", 
     "name": "kelvin" 
     }, 
    "334": { 
     "id": "2", 
     "name": "john" 
    } 
}