2012-06-29 38 views
4

我有一個對象,它獲取以此順序添加的屬性。在Flash中循環顯示對象屬性

Home 
School 
living 
status 
sound 
Memory 

當我通過對象循環時,它們不會以該順序出現。我如何讓他們按照這個順序出來。

數據對象

for (var i:String in data) 
{ 
    trace(i + ": " + data[i]); 
} 

有沒有一種辦法也許排序呢?

+1

http://stackoverflow.com/questions/10083064/whats-happening-when-i-use-fori-in-object-in-as3 – Marty

回答

9

對您可以訪問屬性的訂單進行排序的唯一方法是手動。下面是我創建爲你做到這一點的函數:

function getSortedPairs(object:Object):Array 
{ 
    var sorted:Array = []; 

    for(var i:String in object) 
    { 
     sorted.push({ key: i, value: object[i] }); 
    } 

    sorted.sortOn("key"); 

    return sorted; 
} 

試用:

var test:Object = { a: 1, b: 2, c: 3, d: 4, e: 5 }; 
var sorted:Array = getSortedPairs(test); 

for each(var i:Object in sorted) 
{ 
    trace(i.key, i.value); 
} 
+0

我需要排序屬性鍵和值不只是價值。我會怎麼去 – Chapsterj

+0

正確,但這隻會排序鍵或值,但我需要排序後才能訪問密鑰和值 – Chapsterj

+0

我看到最新情況,但值和鍵仍然沒有出來他們首先被添加到對象的方式。 – Chapsterj

1

馬蒂共享解釋所發生的事情非常好,他的回答是太出色的鏈接。

如果訂單很重要,您可能會考慮的另一種解決方案是使用Vector

// Init the vector 
var hectorTheVector:Vector.<String> = new Vector.<String>(); 

// Can add items by index 
hectorTheVector[0] = "Home"; 
hectorTheVector[1] = "School"; 
hectorTheVector[2] = "living"; 

// Or add items by push 
hectorTheVector.push("status"); 
hectorTheVector.push("sound"); 
hectorTheVector.push("Memory"); 

//See all items in order 
for(var i:int = 0; i < hectorTheVector.length; i++){ 
    trace(hectorTheVector[i]); 
} 

/* Traces out: 
Home 
School 
living 
status 
sound 
Memory 
*/ 

Array也會保持順序。這裏是一個good topic on sorting Arrays

+1

LOL赫克託矢量。 – Marty