2016-01-21 122 views
-1

我有這樣 對象{ alexa排名:1, 約翰:5, 比爾:2 }排序的對象與JS

我需要的值進行排序,從大到小,但我看不到如何做到這一點。有任何想法嗎?

+0

你不想。 –

+4

對象中沒有順序,無法排序 – adeneo

+1

如果您的意思是「使用排序後的元素打印對象」,那麼您可以(也應該)編輯問題:) – wil93

回答

0

var objUnordered = { alexa: 1, John: 5, Bill: 2 }; 
 
var objOrdered = {}; 
 
var sortable = []; 
 

 
for (var element in objUnordered){ 
 
    sortable.push([element, objUnordered[element]]); 
 
} 
 
sortable.sort(function(a, b) {return a[1] - b[1]}) 
 
for(var key in sortable){ 
 
    objOrdered[sortable[key][0]] = sortable[key][1]; 
 
} 
 

 
console.log(objOrdered); //print this -> Object { alexa=1, Bill=2, John=5}

+0

工作,謝謝soooo多!!! – user3474502

1

,您仍然可以拿到鑰匙的數組進行排序 - 然後就循環鍵數組來訪問你的對象以正確的順序:

var obj = { alexa: 1, John: 5, Bill: 2 }; 
var sortedKeys = Object.keys(obj).sort(function(a, b) { 
    return obj[a] - obj[b] 
}); 

sortedKeys.forEach(function(k) { 
    console.log(obj[k]); 
}); 

創建從對象的數組:

var sortedArray = Object.keys(obj).sort(function(a, b) { 
    return obj[a] - obj[b] 
}).map(function(k) { 
    var o = {}; 
    o[k] = obj[k]; 

    return o; 
}); 
+0

這可行,但我需要的輸出是{Alexa :1,Bill:2,John:5}當它被排序時,我需要知道屬於每個數字的鍵,因爲這些值可以重複... – user3474502

+0

將格式更改爲數組,類似'[{名稱:'Alexa',麻木:1},{名稱:'比爾',麻木:2}]',那麼你可以對它進行排序,並保持跟蹤 – adeneo

+0

@ user3474502對象不*排序。 「{Alexa:1,Bill:2,John:5}」與「{Alexa:1,John:5,Bill:2}」完全一樣,對它進行排序是一個無稽之談。 –