angular.copy是不复制具有子对象或数组的对象

时间:2018-07-28 06:45:18

标签: javascript arrays angularjs

我正在使用angularjs 1.5,并且试图将一个对象复制到另一个变量中。 要复制变量,我正在使用angular.copy() function。目标变量未获取源中存在的所有值。

  

下面是我的代码

$scope.searchCond = {
    group_id:[],
    sections:[]      
};
for(var i=1;i<5;i++)  {   
   $scope.searchCond.sections[i+"_sec"]=[];
   $scope.searchCond.sections[i+"_sec"]["section_id"]=[];
   $scope.searchCond.sections[i+"_sec"]["section_id"].push(i);
};
var tmpVar = angular.copy($scope.searchCond);
console.log(tmpVar);
console.log($scope.searchCond);
  

两个控制台的输出在下面给出

$ scope.searchCond的输出

{group_id: Array(0), sections: Array(0)}
group_id:[]
sections:Array(0)
1_sec:[section_id: Array(1)]
2_sec:[section_id: Array(1)]
3_sec:[section_id: Array(1)]
4_sec:[section_id: Array(1)]

tmpVar的输出

{group_id: Array(0), sections: Array(0)}
group_id:[]
sections:Array(0)
length:0

tmpVar 不会从源对象 $ scope.searchCond

复制节(1_sec,2_sec)

这个问题有解决方案吗?

1 个答案:

答案 0 :(得分:1)

$scope.searchCond = {
    group_id:[],
    ̶s̶e̶c̶t̶i̶o̶n̶s̶:̶[̶]̶
    sections:{}      
};
for(var i=1;i<5;i++)  {   
   ̶$̶s̶c̶o̶p̶e̶.̶s̶e̶a̶r̶c̶h̶C̶o̶n̶d̶.̶s̶e̶c̶t̶i̶o̶n̶s̶[̶i̶+̶"̶_̶s̶e̶c̶"̶]̶=̶[̶]̶;̶
   $scope.searchCond.sections[i+"_sec"]={};
   $scope.searchCond.sections[i+"_sec"]["section_id"]=[];
   $scope.searchCond.sections[i+"_sec"]["section_id"].push(i);
};
var tmpVar = angular.copy($scope.searchCond);
console.log(tmpVar);
console.log($scope.searchCond);

angular.copy函数仅复制数组的数字属性。如果希望属性名称为非数字,则将其初始化为对象。