【问题标题】:get key of a object at index x获取索引 x 处对象的键
【发布时间】:2015-06-23 07:44:06
【问题描述】:

如何在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 中是否有任何等价物?

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

【问题讨论】:

  • 这是一个奇怪的问题,因为这些键在运行时没有任何特定的顺序。
  • 你能告诉我们你为什么想要这个吗?您的用例可能有更好的解决方案。例如,要获取一个对象的所有键,请参考this question
  • @DodgerThud 我已经更新了问题。
  • 如果你需要一个索引使用数组或向量,如果你不需要一个索引使用对象(因为你永远不会得到一个对象)
  • @Vishnu 看看my answer of this question,可能会有帮助。

标签: actionscript-3 apache-flex


【解决方案1】:

根据 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() 默认情况下返回一个数组,其中的键按升序排列。这样,您就可以保证始终拥有相同的键序列,并且能够调出您正在寻找的索引。添加更多键时要小心,因为它会根据每个条目在排序中的显示位置移动它。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-02-09
      • 2014-05-15
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多