2015-06-23 4 views
0

Как получить ключ по указанному индексу объекта в Flex?получить ключ от объекта по индексу x

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, добавляя их в Array Collection. Я должен получить ключ от объекта на основе выбранного индекса.

+1

Это странный вопрос, потому что эти ключи не находятся в каком-либо конкретном порядке во время выполнения. – Marty

+0

Не могли бы вы рассказать нам, почему вы хотите этого? Вероятно, есть лучшее решение для вашего использования. Например, чтобы получить все ключи объекта, обратитесь к [этому вопросу] (http://stackoverflow.com/questions/2427284/get-the-key-of-an-object-in-actionscript-3) – DodgerThud

+0

@DodgerThud Я обновил вопрос. – Vishnu

ответ

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() возвращает массив с ключами в порядке возрастания по умолчанию. Таким образом, вы всегда будете иметь одну и ту же последовательность ключей и сможете поднять индекс, который вы ищете. Просто будьте осторожны при добавлении большего количества ключей, поскольку он будет перемещать каждую запись в зависимости от того, где она появляется в сортировке.

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

Примечания, однако, что перечислим порядок ключей на объект во время выполнения не обязательно так же, как вы написали его в коде.

Смежные вопросы