2012-06-29 37 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