我想扩展一些递归的属性(又名深度复制)。就像jQuery一样。我不只包括jquery一件事的b / c。
jQuery.extend( true, target, object1 )
您知道有什么优雅的方法可以使用简单的javascript或angularjs吗?
更新, 请看看并尝试完成相同的结果 http://plnkr.co/edit/GHabYbyhsqtfBPtplksO?p=preview
我确实调查了.copy()但“属性(对象)已删除”
这是一个基于angular.extend函数的extendDeep函数。如果将其添加到$ scope中,则可以调用
$scope.meta = $scope.extendDeep(ajaxResponse1.myMeta, ajaxResponse2.defaultMeta);
并找到您想要的答案。
$scope.extendDeep = function extendDeep(dst) { angular.forEach(arguments, function(obj) { if (obj !== dst) { angular.forEach(obj, function(value, key) { if (dst[key] && dst[key].constructor && dst[key].constructor === Object) { extendDeep(dst[key], value); } else { dst[key] = value; } }); } }); return dst; };
注意:此函数具有将值从后面的参数复制到前面的参数的副作用。要对此副作用进行简单的修复,可以更改dst[key] = value为dst[key] = angular.copy(value)。
dst[key] = value
dst[key] = angular.copy(value)