0

正如我们所知,可以使用索引器按名称访问字段。

var obj:* = {name:"Object 1"};
trace(obj["name"]); // "Object 1"

但是如何通过 String 访问数组元素呢?

var arr:Array = new Array();
var obj:* = {items:arr};
trace(obj["items[0]"]); // Undefined
4

1 回答 1

2

好的,基本上您希望能够将字符串解释为动作脚本。恐怕没有优雅的解决方案。您可以编写一个解析器来处理字符串中的一些简单语法并检索该值。

这是一个简单的例子:

var obj:Object = {
    items:[1, 2, 3], 
    subObj: {
        subitems: [4, 5, 6]
    }
};

trace(getValueInObject(obj, "items[0]")); // 1
trace(getValueInObject(obj, "subObj.subitems[2]")); // 6

// takes an object and a "path", and returns the value stored at the specified path.
// Handles dot syntax and []
function getValueInObject(obj : Object, pathToValue : String) : * {
    pathToValue = pathToValue.replace(/\[/g, ".").replace(/]/g, "");
    var pathFractions : Array = pathToValue.split(".");
    var currentObject : Object = obj;

    while (pathFractions.length > 0 && currentObject != null) {
        var fraction : String = pathFractions.shift();
        currentObject = currentObject[fraction];
    }

    if (currentObject != null) {
        return currentObject;
    }

    return null;
}
于 2013-08-19T12:16:27.250 回答