2013-11-26 42 views
-1

我需要使用其值對對象中的鍵進行排序。我試圖使用JavaScript的排序方法,但還沒弄明白。我的目標是這樣的:如何對物品進行分類?

var myJson = [ 
     { 
     "4": 3, 
     "5": 3, 
     "14": 3, 
     "18": 3, 
     "20": 1, 
     "23": 3, 
     "25": 3, 
     "33": 3, 
     "36": 3 
    } 
]; 

我需要梳理的名字,在方向鍵對這樣的命令:

var myJson = [ 
     { 
     "4": 3, 
     "5": 3, 
     "14": 3, 
     "18": 3, 
     "23": 3, 
     "25": 3, 
     "33": 3, 
     "36": 3, 
     "20": 1 
    } 
]; 
+11

物體沒有秩序! – epascarello

+0

請參閱編輯的問題。 – Imran

+0

你想完成什麼?一個對象不能像數組一樣工作。 「排序」這個對象不會做任何事 –

回答

1

假設你想要從排序順序對象的元素。您可以從對象中獲取鍵並對鍵進行排序並從對象中檢索值。如下所示,

var keys = []; 
for(var k in obj) keys.push(k); 
keys.sort(); 

for (var i = 0; i < keys.length; i++) { 
    console.log(obj[key]); 
} 
+0

我需要使用值對它進行排序,並且需要基於值排序的鍵 – Imran

+0

@Imran然後使用數組。 –

0

正如已經指出的那樣,對象沒有順序。所以,你必須改變你的對象結構,以便進行排序,這樣的:

var myJson = [ 
    { "itemA" : { "value1": "4", "value2" : 3 } }, 
    { "itemB" : { "value1": "5", "value2" : 3 } }, 
    { "itemC" : { "value1": "14", "value2" : 3 } }, 
    { "itemD" : { "value1": "18", "value2" : 3 } } 
]; 

現在你可以通過任何一個值,通過自定義排序函數來排序對象的數組。

myJson.sort(function(a,b) { 
    if (a.value2 == b.value2) { 
     return parseInt(a.value1,10) - parseInt(b.value1,10); 
    } 
    return a.value2 - b.value2; 
}); 

當然上述功能只能如果value2值是整數和value1的值是整數的字符串表示...但你的想法。

+0

是的,這看起來像一個解決方案。這意味着我無法對對象進行排序。對? – Imran

0

如前所述,您無法對對象進行排序,但可以按照正確的順序(在數組中)獲取這些值。您可以按順序運行數組,然後拖動鍵或拉取值或任何您需要的值。

下面的腳本取第一物體離開myJson陣列和構建陣列的新的數組,其中每個條目爲[鍵,值]

// pull the hash out of the array 
var j = myJson[0]; // first element is the hash 

// for each hash entry, build an array pair 
var as_array = [] 
for(k in j) { 
    as_array.push([parseInt(k,10), j[k]]); 
} 
// sort first by value desc, then by key asc 
var sorter = function(a,b) { return (a[1] < b[1]) && (b[0] > a[0]); } 
var sorted = as_array.sort(sorter) 

// show the results 
sorted.forEach(function(el) { console.log(el); } 

我還注意到,分揀似乎比只是.sort更復雜因爲你想按值排序(降序)然後按鍵排序 - 我希望我能正確閱讀。

相關問題