获取索引x处的对象的键

时间:2015-06-23 07:44:06

标签: actionscript-3 flex

如何在Flex中的对象的指定索引处获取密钥?

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中是否有相应的内容?

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

根据Adobe的说法,“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()会按键以升序返回一个数组。这样,您将保证始终具有相同的键序列,并能够提取您正在寻找的索引。添加更多密钥时要小心,因为它会根据排序中显示的位置移动每个条目。