AS3 如何将数组的值分配给对象的键?

AS3 How to assign value of an array to the Keys of an object?

我认为这与 Eval 相关。

在这里,我有一个 运行 时间长度未知的数组。 例如,我希望将数组中的值分配为对象的 KEYS,如下所示:

var myArr:Array = ['a','b','c',...]; //unknown length
var finalValue:int = 20;
var myObj:Object = new Object();

assignValueToObject(); 

//logics of assignValueToObject function
/*
   //TODO.. black box
*/

//In the end, myObj has the value stored and can be accessed like this
myObj["a"]["b"]["c"][...] = 20;

我不确定是否需要求助于 eval.hurlant,我希望有一种简单的方法(递归或某事)

简单地使用for循环遍历数组的元素并创建除数组最后一个元素之外的对象,该元素不应是对象而是所需的值。代码未经测试。

var myArr:Array = ['a','b','c',...]; //unknown length
var finalValue:int = 20;
var myObj:Object = new Object();

// variable that holdsthe msot recently created sub-object
var currentObject = myObj;

// create nested objects up to the second last property name
for (var index:int = 0; index < myArr.length -1; ++i)
{
    currentObject = currentObject[element] = {};
}

// add value to last property
currentObject[myArr[myArr.length -1]] = finalValue;

当然,如果你想插入很多这样的值,你必须检查嵌套对象结构是否已经包含一些属性以避免覆盖那些现有的。

我不得不说这看起来很复杂,而且您尝试解决的实际问题很有可能比将 属性 名称作为数组中的字符串更优雅地解决。

@null照例是对的,我只是加了这个例子来实现大图。 您也可以在循环中初始化它,这样您就可以制作您想要的东西(如 null 建议您)...

var myArray:Array = ["a", "b", "c"];
var mySecondArray:Array = ["a", "b", "c"];
var myValues:Array = ["first element", "secondt element", "third element"];
var relValues:Array = [150, 75, 500];
var indexedValues:Array = [1, 2, 3];
var myObject:Object;
var mySecondObject:Object;
function converArraytToObject(myArray:Array, myValues:Array):Object{
    var o:Object=new Object();
    for(var i:uint = 0; i < myArray.length; i ++){
        o[myArray[i].toString()] = myValues[i].toString();
    }
    return o;
}  
trace(myObject["a"]);
// outputs "first element"
trace(myObject["b"]);
// outputs "second element"
trace(myObject["c"]);
// outputs "third element"
// or
trace(" ***UNSORTED");
for (var j in myObject){
    trace ("index name = [" + j + "] = " +myObject[j]);
}
// or
trace(" ***SORTED by index");
for (var k = 0 ; k < myArray.length ; k++){
    trace ("index name = [" + myArray[k] + "] = " + myObject[myArray[k]]);
}
//or
trace(" ***UNSORTED");
for (var l in mySecondObject){
    trace ("index name = [" + l + "] = " + mySecondObject[l]);
}
//or
trace(" ***SORTED by index");
for (var m = 0 ; m < myArray.length ; m++){
    trace ("index name = [" + myArray[m] + "] = " + mySecondObject[myArray[m]]);
}

输出:

如果您想存储相同的实例 Class,我建议您使用 Vector Class 代替 Array。

first element
secondt element
third element
    ***UNSORTED
index name = [c] = third element
index name = [a] = first element
index name = [b] = secondt element
    ***SORTED by index
index name = [a] = first element
index name = [b] = secondt element
index name = [c] = third element
    ***UNSORTED
index name = [c] = 3
index name = [a] = 1
index name = [b] = 2
    ***SORTED by index
index name = [a] = 1
index name = [b] = 2
index name = [c] = 3

ActionScript 3 fundamentals: Arrays

ActionScript 3 fundamentals: Associative arrays, maps, and dictionaries

ActionScript 3 fundamentals: Vectors and ByteArrays