【问题标题】:loop through object properties in flash循环浏览 Flash 中的对象属性
【发布时间】:2012-06-29 03:43:43
【问题描述】:

我有一个对象,它获取按此顺序添加的属性。

Home
School
living
status
sound
Memory

当我遍历对象时,它们不会按该顺序出现。我怎样才能让他们按这个顺序出来。

数据是对象

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

有没有办法排序?

【问题讨论】:

标签: actionscript-3 flash


【解决方案1】:

对您可以访问属性的顺序进行排序的唯一方法是手动。这是我为您创建的一个函数:

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);
}

【讨论】:

  • 我需要对属性键和值进行排序,而不仅仅是对值进行排序。我该怎么做呢
  • 对,但这只会对键或值进行排序,但我需要在排序后才能访问键和值
  • 我知道发生了什么,但值和键仍然没有像第一次添加到对象中那样出来。
  • 生活、记忆、家庭、学校、状态、声音、标题
  • @Chapsterj 除了手动存储该订单外,没有其他方法可以做到这一点,即像我按所需顺序逐行填充“排序”数组一样。
【解决方案2】:

Marty 分享的链接很好地解释了正在发生的事情,他的回答也很好。

如果订单很重要,您还可以考虑使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2012-07-21
    相关资源
    最近更新 更多