flash之在 AS3 中合并对象

exmyth 阅读:73 2024-06-20 12:54:19 评论:0

我想将两个 A3 对象合并在一起,它们包含一些相同的键但不同的值。我发现了很多关于将两个对象添加在一起的帖子,但我想将这两个对象合并在一起,所以如果第二个对象具有不同的值,它们优先。我在下面有两个对象:

    _propsObj =  new Object(); 
    _propsObj.baseColour = 0x303237; 
    _propsObj.animation = false; 
    _propsObj.font = "Verdana"; 
    _propsObj.fontColour = 0xffffff; 
    _propsObj.baseFontSize = 14;     
 
    _propsObj2 =  new Object(); 
    _propsObj2.animation = true;         
    _propsObj2.fontColour = 0xffffff; 
    _propsObj2.baseFontSize = 10;    

我想要的输出对象将接受第二个对象的新值,但保持第一个对象的值:

    _outputObj.baseColour = 0x303237; 
    _outputObj.animation = true; 
    _outputObj.font = "Verdana"; 
    _outputObj.fontColour = 0xffffff; 
    _outputObj.baseFontSize = 10;    

我不确定是否应该使用 Array.concat 执行此操作,或者是否有更简单的解决方案?任何帮助将不胜感激。

请您参考如下方法:

下面的合并方法

    var _propsObj:Object =  new Object(); 
    _propsObj.baseColour = 0x303237; 
    _propsObj.animation = false; 
    _propsObj.font = "Verdana"; 
    _propsObj.fontColour = 0xffffff; 
    _propsObj.baseFontSize = 14;     
 
    var _propsObj2:Object =  new Object(); 
    _propsObj2.animation = true;         
    _propsObj2.fontColour = 0xffffff; 
    _propsObj2.baseFontSize = 10;    
         
    var merged:Object = merge( _propsObj, _propsObj2 ); 
         
    private function merge( obj0:Object, obj1:Object ):Object 
    { 
        var obj:Object = { }; 
        for( var p:String in obj0 ) 
        { 
            obj[ p ] = ( obj1[ p ] != null ) ? obj1[ p ] : obj0[ p ]; 
            trace( p, ' : obj0', obj0[ p ], 'obj1', obj1[ p ], '-> new value = ', obj[ p ] ); 
        } 
        return obj; 
    } 
     

痕迹:

font : obj0 Verdana obj1 undefined -> new value = Verdana

fontColour : obj0 16777215 obj1 16777215 -> new value = 16777215

baseColour : obj0 3158583 obj1 undefined -> new value = 3158583

animation : obj0 false obj1 true -> new value = true

baseFontSize : obj0 14 obj1 10 -> new value = 10

重要的一行是:

obj[ p ] = ( obj1[ p ] != null ) ? obj1[ p ] : obj0[ p ]; 

它递归地在新对象'obj'上创建属性,并检查该属性是否已分配给第二个对象,如果是,则将第二个对象的值分配给该属性,否则将回退到该属性的值第一个对象的属性。

注意:如果第一个对象上没有设置值,则不会在第二个对象中查找。


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号