2011-11-23 54 views
4

可能重複:
Sorting JavaScript Object by property value排序簡單的JSON對象

因爲我發現瀏覽器無法保證JSON的排序低谷Ajax調用(reference),我在用ajax調用後用javascript對JSON元素進行排序時遇到了一些麻煩。

我發現了一些關於這個問題的話題,但沒有給出我的JSON對象簡單結構的明確解決方案。我剛剛得到了一個有很多數據的細分市場。 我知道有很多關於這個的話題,即使在stackoverflow上,但沒有任何主題處理這個簡單的json結構。

例如:

{ 
    "158":"Banana", 
    "265":"Pear", 
    "358":"Apple", 
    "864":"Peach" 
} 

我如何排序的fruitnames而不是ID的這個對象? 我想在結束時有這樣的對象:提前

{ 
    "358":"Apple", 
    "158":"Banana", 
    "864":"Peach" 
    "265":"Pear", 
} 

感謝。

+1

請參閱:http://stackoverflow.com/questions/8175093/simple-function-to-sort-a-json-object-using-javascript – pradeek

+1

underscore.js有一個很不錯的'sortBy()'函數:http: //documentcloud.github.com/underscore/#sortBy – Teddy

+8

對象沒有任何特定的順序。如果你想要它們,請使用數組(對象)。 –

回答

2
var kk = { 
    "158":"Banana", 
    "265":"Pear", 
    "358":"Apple", 
    "864":"Peach" 
} 

var keys = []; 
var datas = {} 

$.each(kk, function(key, value){ 

    keys.push(value) 
    datas[value] = key; 

}) 
    var aa = keys.sort() 

     var sorted ={} 

$.each(aa, function(index, value){ 

    sorted[datas[value]] = value; 
}) 
+0

這只是另一種方式。我想對不在id上的名稱進行排序,但我正在嘗試使用代碼示例的解決方案。 – Tim

+0

@Tim我更新了它。 – erimerturk

+0

對於您用來創建排序對象的每個對象,都可以用來解決問題。但請記住**'對象沒有任何特定的順序。如果你想要它們,請使用數組(對象)來代替'**。 謝謝你的時間。 – Tim

0
var someObject = { 
    "158":"Banana", 
    "265":"Pear", 
    "358":"Apple", 
    "864":"Peach" 
}; 

//flip the name/value pairs 
Object.prototype["reverseObject"] = function() { 
    var name; 
    var newObject = {}; 
    for(name in this) { 
     if(typeof this[name] !== 'function') { 
      newObject[this[name]] = name; 
     } 
    } 
    return newObject; 
} 

var reversedObject = someObject.reverseObject(); 

console.log(reversedObject); 

var i; 
var properties = []; 
//get all the property names 
$.each(reversedObject, function(key, value) { 
    if(reversedObject[key] !== this) 
    properties.push(key); 
}); 

properties.sort(); 

var sortedObject = []; 

//iterate the array using the order specified 
for(i = 0; i < properties.length; i += 1) { 
    sortedObject[properties[i]] = reversedObject[properties[i]]; 
    //document.writeln(properties[i] + " : " + reversedObject[properties[i]]); 
} 

var sortedObject = sortedObject.reverseObject(); 

console.log(sortedObject); 

Fiddle

這將創建屬性名稱的字母順序排序後的數組。然後,該數組用於索引對象。這會導致您請求的確切對象。