2016-11-13 3 views
0

저는 이것이 Eval과 관련 있다고 생각합니다.AS3 배열의 값을 객체의 키에 할당하는 방법은 무엇입니까?

여기에는 런타임에 알 수없는 길이의 배열이 있습니다. 말은, 예를 들어, 나는 다음과 같이 객체의 키와 같은 배열의 값을 할당 할 :

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에 의지해야하는 경우 확실하지 않다, 나는 간단한이 원하는 이것을하는 방법 (재귀 또는 sth)

+0

내가 뭘 "myObj로 이해가 안 돼요 ["A "] ["B "] ["C "] [...] = 20 "은 의미합니다. AS3에서이 구문을 본 적이 없습니다. 어쩌면 그것은 내가 AS3에 상당히 익숙하기 때문에 나만의 일일 수도 있지만, 그것이 내가 본 것을 어떻게 보았는지는 아닙니다. 나는 이것이 모든 종류의 오류를 던질 것으로 기대합니다. 정수와 같은 객체를 설정하기 때문입니다. 이게 무슨 뜻일까요? 객체는'= '정수가 될 수 없습니다. 아니면 개체에 20 개의 속성이 있음을 의미합니까? 이것은 매우 혼란 스럽습니다. –

+0

아마도 myObj = { "a": 문자열, "b": 문자열, "c": 문자열, ... "t": 문자열}; ' –

+0

@NealDavis myObj 다른 객체 (다중 레이어)를 포함하는 객체입니다. myObj [ "a"]의 값은 키 "b"와 키 "c"가 포함 된 다른 객체의 값을 포함하는 객체입니다. JSON 형식으로 간주 할 수 있습니다. { "A": { "B": { "C": { ... } } } } 내가 원하는 것을 정확하게 작동 – zeroflaw

답변

2

단순히 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; 

, 당신은 당신이 중첩 된 객체 구조가 이미 그 기존 재정 피하기 위해 일부 속성이 포함되어 있는지 확인해야 할 많은 같은 값을 삽입 할 경우.

이 말은 꽤 복잡해 보입니다. 해결하려고하는 실제 문제가 속성 이름을 배열의 문자열로 사용하는 것보다 훨씬 더 효율적으로 해결 될 가능성이 큽니다.

+0

! 1-2 일 후에 응답을 표시하도록 허용하십시오. 고맙습니다! – zeroflaw

+0

확실히 @null 글을 쓰면 이것이 가치 있고 아마도 가장 짧고 짧은 답변 일 것입니다! 그의 게시물을 해결 된 AMO로 받아 들여야합니다. – tatactic

+0

null 응답에 많은 시간이 걸리므로 피드백을주십시오!고맙습니다! – tatactic

1

@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]]); 
} 

OUTPUT : 당신의 같은 인스턴스를 저장하려면

클래스, 배열 대신 벡터 클래스를 사용하는 것이 좋습니다.

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