一尘不染

angularjs-扩展递归

angularjs

我想扩展一些递归的属性(又名深度复制)。就像jQuery一样。我不只包括jquery一件事的b / c。

jQuery.extend( true, target, object1 )

您知道有什么优雅的方法可以使用简单的javascript或angularjs吗?

更新, 请看看并尝试完成相同的结果
http://plnkr.co/edit/GHabYbyhsqtfBPtplksO?p=preview

我确实调查了.copy()但“属性(对象)已删除”


阅读 206

收藏
2020-07-04

共1个答案

一尘不染

这是一个基于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] = valuedst[key] = angular.copy(value)

2020-07-04