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