2011-07-31 85 views
0

如果我有一個JavaScript對象是這樣的:如何對這個javascript對象進行排序?

{ 'apples':14, 'oranges': 1, 'bananas':4 } 

我如何排序是一個數組,按降序排列,基於價值?

結果:

[ 'apples', 'bananas', 'oranges' ] 

因爲如圖14所示,4個,1 ...降序

回答

4

從物體的所有鍵拉到一個數組和對數組進行排序。

var o = { 'apples':14, 'oranges': 1, 'bananas':4 }; 
var a = []; 

for (var key in o) { 
    a.push(key); 
} 
a.sort(); 

如果你認爲你需要,以防止已添加到對象原型不友好的方式(或不知道)的屬性,那麼你應該做這樣的:

var o = { 'apples':14, 'oranges': 1, 'bananas':4 }; 
var a = []; 

for (var key in o) { 
    if (o.hasOwnProperty(key)) { 
     a.push(key); 
    } 
} 
a.sort(); 

編輯:現在,原來的問題已經改變,並且要求是,現在的關鍵是爲了在原始對象的值進行排序,那將不得不做不同:

var o = { 'apples':14, 'oranges': 1, 'bananas':4 }; 
var a = []; 

for (var key in o) { 
    if (o.hasOwnProperty(key)) { 
     a.push(key); 
    } 
} 
a.sort(function(x, y) {return(o.y - o.x);}); 
+1

只是一個供參考:因爲JavaScript對象的構建方式,你應該始終包的換裏面在具有'hasOwnProperty'的循環中:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/hasOwnProperty#section_8 – OverZealous

+0

如果它是您自己的代碼,並且您知道發生了什麼,並且沒有人擴展對象類對於'fo'有不友好的附加屬性r'循環,沒有必要包裝它。如果你不知道項目中發生的一切,那麼我同意保護它免於流浪財產更安全。 – jfriend00

+0

好的,我爲那些允許將對象原型與他們的項目混爲一談的人(我不允許的東西)添加了選項。 – jfriend00

1

這裏是我的方法解決這個問題:

var o={ 'apples':14, 'oranges': 1, 'bananas':4 }; 
var a=[]; 
for(var fruit in o) 
{ 
    if(o[fruit]) 
     a[fruit]=o[fruit]; i.e // a[apples]=14; 
} 

a.sort(function(a,b){return Number(a)-Number(b);}); 

現在由值排序。

console.log("Sorted Fruits:") 
for(var fruit in o) 
{ 
    if(o[fruit]) 
     console.log(fruit); 
} 
+0

但'a'不是['蘋果','香蕉','桔子'],一個數組。 'a'是[蘋果:14,橙子:1,香蕉:4] – TIMEX

+0

http://stackoverflow.com/questions/684672/loop-through-json-object – Baz1nga

+0

這產生了一個值的數組,它不是什麼要求。經過一番討論後,看起來他們希望按照這些鍵值的順序排列一組鍵。 – jfriend00

1

這裏是ES5的方式來做到這一點:

var fruit = { 'apples':14, 'oranges':1, 'grapefruit':70, 'bananas':4 } 

var orderedByDescendingQuantities = Object.keys(fruit).sort(function (x, y) { 
    return fruit[y] - fruit[x]; 
}); 

alert(orderedByDescendingQuantities); 

http://jsfiddle.net/gh5x8/

相關問題