Объединить / объединить динамические объекты в AS3 - PullRequest
2 голосов
/ 16 ноября 2010

У меня есть 2 динамических объекта, и я хочу построить один, содержащий все свойства:

var o1:Object = {prop1:val1,prop2:val2,prop3:val3};
var o2:Object = {prop3:val3a,prop4:val4};

, и мне нужно получить третий объект, который выглядит так:

{prop1:val1, prop2:val2, prop3:val3a, prop4:val4};

В основном мне нужен способ перебирать свойства объекта и добавлять новые свойства к третьему объекту.Я должен отметить, что я довольно новичок в AS3 / Flash / Flex.

Ответы [ 3 ]

3 голосов
/ 16 ноября 2010

Первый вопрос, вы действительно хотите иметь prop3 в обоих объектах?вам нужно будет решить, что делать в случае такого столкновения, какой объект имеет приоритет.

Во-вторых, посмотрите на самоанализ apis: http://livedocs.adobe.com/flex/3/html/help.html?content=usingas_8.html

что-то вроде этого должно работать:

public function mergeDynamicObjects ( objectA:Object, objectB:Object ) : Object 
{
    var objectC:Object = new Object();

    var p:String;

    for (p in objectA) {
       objectC[p] = objectA[p];
    }

    for (p in objectB) {
       objectC[p] = objectB[p];
    }

    return objectC;
}

Если свойство существует в A и B, B перезапишетКак.Также обратите внимание, что если значения свойства являются объектом, оно передаст ссылку, а не копию значения.В этих случаях вам может понадобиться клонировать объект, в зависимости от ваших потребностей.

Примечание. На самом деле я не проверял вышеизложенное, но оно должно быть близко.Дайте мне знать, если это не сработает.

Обновлено, чтобы исправить ошибки.Рад, что это работает для вас, хотя.

2 голосов
/ 16 ноября 2010

Вы можете динамически получать доступ / устанавливать свойства объектов с помощью оператора индекса.Цикл for будет перебирать имена свойств, поэтому, если вы соберете все это вместе, следующий тест пройдет:

    [Test]
    public function merge_objects():void {
        var o1:Object = {prop1:"one", prop2:"two", prop3:"three"}; 
        var o2:Object = {prop3:"threeA", prop4:"four"};

        var o3:Object = new Object();

        for (var prop in o1) o3[prop] = o1[prop];
        for (var prop in o2) o3[prop] = o2[prop];

        assertThat(o3.prop1, equalTo("one"));
        assertThat(o3.prop2, equalTo("two"));
        assertThat(o3.prop3, equalTo("threeA"));
        assertThat(o3.prop4, equalTo("four"));
    }
0 голосов
/ 16 ноября 2010

вы можете перебирать свойства объекта, например:

var obj1:Object = new Object();
for(var str:String in obj2){
    obj1[str] = "any value"; // insert the property from obj2 to obj1
}
...