angularjs - extend recursive

前端 未结 6 1546
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-10 10:59

I would like to extend some properties recursive (aka. deep copy). much like jQuery does. I\'m not including jquery only b/c of one thing.

jQuery.extend( tru         


        
6条回答
  •  我在风中等你
    2020-12-10 11:31

    Here is an extendDeep function based off of the angular.extend function. If you add this to your $scope, you would then be able to call

    $scope.meta = $scope.extendDeep(ajaxResponse1.myMeta, ajaxResponse2.defaultMeta);
    

    and get the answer you are looking for.

    $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;
    };
    

    Note: This function has the side-effect of copying values from later arguments into the earlier arguments. For a simple fix to this side effect, you can change dst[key] = value to dst[key] = angular.copy(value).

提交回复
热议问题