以此angular recursive extend topic为基础。
我稍微修改了版本......
var extendDeep = function(dst) {
angular.forEach(arguments, function(obj) {
if (obj !== dst) {
angular.forEach(obj, function(value, key) {
if (dst[key] && angular.isObject(dst[key])) {
extendDeep(dst[key], value);
} else if(!angular.isFunction(dst[key])) {
dst[key] = value;
}
});
}
});
return dst;
};
但发现它没有正确考虑数组。例如,如果我有一个像这样的对象:
var obj = { zoo: [ 'moose', 'panda' ] };
然后我打电话给:
deepExtend(obj, {
zoo: [ 'panda' ]
})
乍一看,你会期望它删除对象,但实际上它最终会像:
{ zoo: [ 'panda', 'panda' ] }
现在。预期的输出看起来像:
{ zoo: [ 'panda' ] }
当然,这是一个非常简单的案例。
我并不像大多数解决方案那样寻找'独特'或'合并'。我需要添加左侧缺少的项目,删除左侧但不是右侧的项目,然后递归迭代并将这些对象扩展到位。
有很多不同的方法可以解决这个问题,寻找有关良好方法的反馈。