正如我们所知,可以使用索引器按名称访问字段。
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
正如我们所知,可以使用索引器按名称访问字段。
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
好的,基本上您希望能够将字符串解释为动作脚本。恐怕没有优雅的解决方案。您可以编写一个解析器来处理字符串中的一些简单语法并检索该值。
这是一个简单的例子:
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;
}