以角度深度复制对象?

Ade*_*lin 51 javascript angularjs

我想知道当你需要创建一个包含嵌入对象数组的简单对象时,是否有必要避免复制对象的引用.情况如下:我有服务器接受JSON并应用一些逻辑然后将对象存储在D B.假设我的表单用于在DB中保存团队.服务器接受团队为json.团队有一系列TeamMember对象,我的表单有一个简单的字段来输入团队成员信息并将其添加到团队teamMembers数组.现在问题就出现了,当我将一个团队成员添加到数组列表中并希望在我输入字段时添加另一个团队成员时,添加的成员也会被更改!我知道原因

$scope.addTeamMember=function(teamMember){
   $scope.team.teamMembers.push(teamMember);
}
Run Code Online (Sandbox Code Playgroud)

这是因为我将相同的引用放入teamMembers数组中,所以我添加了相同的对象几次.为了避免这种情况,我应该创建一个新的团队成员对象,复制所有teamMember属性并将其添加到数组中.

 $scope.addTeamMember=function(teamMember){
       var newTeamMember; /*<--- copy teamMember */
       $scope.team.teamMembers.push(newTeamMember); /*and add newTeamMember*/
    }
Run Code Online (Sandbox Code Playgroud)

Ben*_*esh 116

你的问题说你想"避免深刻复制",但我不确定这是否准确.听起来你只想使用angular.copy,因为你需要创建团队成员的副本并将其添加到数组中:

$scope.addTeamMember = function(teamMember) {
   var newTeamMember = angular.copy(teamMember);
   $scope.team.teamMembers.push(newTeamMember);
};
Run Code Online (Sandbox Code Playgroud)

  • 由于JavaScript对象是通过引用传递的,如果将teamMember推送到数组并最终修改它,那么原始对象也将被修改.`var animal = {Name:'dog'};`然后我们将它添加到数组中两次.`var array = []; 的Array.push(动物); array.push(animal);`然后我们修改了数组中的第二个动物.`array [1] .Name ='cat';`现在,所有的动物都被命名为"猫".`的console.log(animal.Name); console.log(array [0];`输出:'cat'表示两者. (12认同)

ana*_*han 6

这是最好的文档

https://docs.angularjs.org/api/ng/function/angular.copy

页面上还有一个实例,它是自我说明的.