flash之在 AS3 中合并对象
我想将两个 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.作者投稿可能会经我们编辑修改或补充。