2012-08-03 104 views
1

可能重複:
Sorting a JavaScript object
Sort JavaScript object by key如何在javascript中對對象元素進行排序?

我有數組:(?號順序)

var arr = {} 
arr[2323] = 1 
arr[123] = 1 
... 
arr[n+232323] = 1 

如何獲得的aobject的關鍵排序的所有元素

for (key in arr) { 
    alert(typeof(key)) 
} 

返回字符串類型。

+2

你的意思是對象,因爲沒有什麼所謂的關聯數組中的JavaScript – bugwheels94 2012-08-03 14:19:37

+0

我有一點讓人感到困擾,因爲人們回答說你不能對它們進行排序,顯然如果所有的鍵都是數字的,就可以對它們進行排序。也許他希望遍歷按鍵(按數字順序),以便他可以將它們加載到一個新的對象中,而這些對象之間的關鍵並不相距太遠。 – VoronoiPotato 2012-08-03 14:42:08

+0

對象不能直接排序,但是「我不是」我的答案將提供對象內的'鍵名'的有序列表,因此可以在分離中調用它們。 – Austin 2012-08-03 14:44:29

回答

1

這不是一個聯合數組,這是一個對象。在JavaScript中沒有關聯數組。

此外,對象沒有排序。對象中鍵的順序是沒有意義的。

1

假設有某種原因,你不首先使用數組,你可以得到枚舉對象屬性的數組和排序數組...

var sorted = Object.keys(my_obj) 
        .sort(function(a,b) { 
          return a - b; 
         }); 

這假定鍵數字。

然後你可以遍歷數組,並使用每個鍵從my_obj獲得的價值...

sorted.forEach(function(key) { 
        console.log(my_obj[key]); 
       }); 
+0

'keys'按照這個語言定義爲'strings'。所以你應該''parseInt'或者使用'+ keyname'或者在'a'或'b'字符串上調用'.localeCompare'。 – jAndy 2012-08-03 14:24:18

+1

@jAndy:「數字」不同於「數字」。你可以有*數字字符串*。我只是說我的排序假定需要數字排序。 – 2012-08-03 14:24:56

+0

請注意,這將返回一個有序數組,列出要訪問的對象的鍵名。 – Austin 2012-08-03 14:26:02

1

簡短的回答:不能。

長答案:JavaScript中的關聯數組實際上是JavaScript對象。當你添加一個新的元素時,你實際上是在向該對象添加一個新成員。儘管大多數瀏覽器會按照添加的順序枚舉這些成員,但標準聲明訂單未定義。你不能排序未定義的東西。

1

JavaScript對象(地圖/字典/關聯數組)沒有順序,您不能對它們排序。您需要先將其轉換爲數組。因爲你只需要在你的循環控制對象的按鍵,Object.keys() function(potentionally需要對舊版瀏覽器的墊片)被運往任務:

var obj = {...}; 
var keys = Object.keys(obj).sort(function(a,b){return a-b;}); // numerically sorted 
for (var i=0; i<keys.length; i++) { 
    alert(keys[i]); 
    // access the values by obj[keys[i]] 
} 
相關問題