正如很多評論中提到的那樣,您不要「排序」一個對象。排序意味着順序,意味着一個集合,意味着一個數據結構。
所以首先,你需要一個對象數組。所以通過迭代鍵將它們提取到數組中。然後使用Array.sort
和自定義比較器。
var objectsToSort = {
"166":
{
"name":{"name":"name","val":"matt","order":""},
"props":{"name":"props","val":"1","order":""}
},
"147":
{
"name":{"name":"name","val":"chris","order":""},
"props":{"name":"props","val":"4","order":""}
}
}
var objects = Object.keys(objectsToSort).map(function (key) {
return objectsToSort[key];
});
objects.sort(function (a, b) {
return a.val - b.val;
});
我注意到val
是一個數字的字符串表示形式。如果你想有一個數字排序,無論是將其更改爲純整數或更改上面的排序函數使用parseInt
:
objects.sort(function (a, b) {
return parseInt(a.val, 10) - parseInt(b.val, 10);
});
我喜歡改變與函數的實際數據,因爲這解析將對每比較兩次運行,通常排序N * log(n)。所以它會運行2(N * log(n))。
這不是一個數組... – 2015-04-02 14:44:58
你沒有一個數組。你想如何分類這個對象,購買它的屬性/鍵(166,147)?檢查[這個答案](http://stackoverflow.com/questions/5467129/sort-javascript-object-by-key)或[this](http://stackoverflow.com/questions/1359761/sorting-a-javascript -object按屬性名稱)。 – skobaljic 2015-04-02 14:45:08
這是一個對象,而不是一個數組。你不會像那樣處理json。 json是一種傳輸編碼格式。你將它解碼爲本地結構(例如JS對象,PHP數組,等等),然後對其進行排序。然後你重新將已排序的結構重新編碼爲json。 – 2015-04-02 14:46:19