获取索引 x 处的对象的键

get key of a object at index x

Flex中如何获取对象指定索引处的key?

var screenWindowListObject:Object = {
  'something' : 'awesome',
  'evenmore'  : 'crazy',
  'evenless'  : 'foolish'
};

我想要索引 1 处的键,即 evenmore

在JavaScript中可以使用下面的代码。

var keys = Object.keys(screenWindowListObject);
console.log(keys[1]);   // gives output 'evenmore'

Flex 中是否有任何等效项?

我有一个带有唯一键的对象。值不是唯一的。我通过将它们添加到数组集合来显示 DropDownList 中的值。我必须根据选定的索引从对象中获取密钥。

JavaScript 的 Object.keys 使用与 for..in 循环相同的顺序,所以在 AS3 中你可以用同样的方式实现它:

function getKeys(object:Object):Array {
    var keys:Array = [];
    for(var key in object){
        keys.push(key);
    }
    return keys;
}

但请注意,运行时对象上键的可枚举顺序不一定与您在代码中编写的顺序相同。

根据 Adob​​e 的说法,“Object properties are not kept in any particular order, so properties may appear in a seemingly random order.”因此,您必须发明自己的顺序。这可以通过用您的键填充一个数组,然后对其进行排序来实现。

function getKeyOrder(hash:Object, sortType:int = 3):Array {
    // Returns an array with sorted key values.
    /*
        1 = CASEINSENSITIVE
        2 = DESCENDING
        3 = ASCENDING
        4 = UNIQUESORT
        8 = RETURNINDEXEDARRAY
        16 = Array.NUMERIC
    */
    var order:Array = [];
    for (var k:String in hash) {
        order.push(k);
    }

    var reverse:Boolean = false;
    if (sortType == 3) {
        reverse = true;
        sortType = 2;
    }

    order.sort(sortType)
    if (reverse) { order.reverse(); }

    return order;
}


var screenWindowListObject:Object = {
    'something' : 'awesome',
    'evenmore'  : 'crazy',
    'evenless'  : 'foolish'
};

var orderedKeys:Array = getKeyOrder(screenWindowListObject);
for each (var key in orderedKeys) {
    trace(key + ":" + screenWindowListObject[key]);
}
/* Results in...
    evenless:foolish
    evenmore:crazy
    something:awesome
*/

trace("Index 0 = " + screenWindowListObject[orderedKeys[0]])
// Index 0 = foolish

getKeyOrder() returns 默认情况下,您的键按升序排列的数组。这样,您就可以保证始终拥有相同的键序列,并且能够调出您要查找的索引。添加更多键时要小心,因为它会根据它在排序中出现的位置移动每个条目。