在AS3中按字符串访问数组元素

时间:2013-08-19 12:11:51

标签: actionscript-3

我们知道可以使用索引器按名称访问字段。

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

1 个答案:

答案 0 :(得分:2)

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

这是一个简单的例子:

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