【问题标题】:angular.copy is Not Copying Objects having sub objects or arrayangular.copy 不复制具有子对象或数组的对象
【发布时间】:2018-07-28 06:45:18
【问题描述】:

我正在使用 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

复制sections(1_sec,2_sec)

这个问题有解决办法吗?

【问题讨论】:

  • 你能从我们的问题中制作一个codepen并在这里发布吗?你的代码甚至没有填充这里的第一个对象codepen.io/OmarEinea/pen/ajVdZp

标签: javascript arrays angularjs


【解决方案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 函数仅复制数组的数值属性。如果您希望属性名称为非数字,请将其初始化为对象。

【讨论】:

  • 我对此还有一个疑问。我试图在 $scope.searchCond.sections 的下一行显示对象的长度,其中已经有(“1_sec”,“2_sec”等),但它总是返回 0 / undefined 可能是什么原因?跨度>
  • Array.length 是对象的属性,它是 Array 类型的实例,设置或返回该数组中的元素数。该值是一个无符号的 32 位整数,在数值上始终大于数组中的最高索引。它不计算非数字属性名,只计算可以解析为整数的属性名。
  • 知道了,谢谢。那么我如何获得对象的长度呢?我尝试使用 Objects.keys,我得到了准确的结果。 angularjs还有其他方法吗?我想遍历对象中的所有属性。
  • angular.copy 函数是 AngularJS 团队为用户提供的内部函数。它的用途有限。如果您想做更复杂的对象/数组操作,请考虑使用其他库,例如 lodash 或 underscore。或者用普通的旧 JavaScript 来做。无论如何,如何计算对象中的属性数量的问题应该以new question 的形式提出。
猜你喜欢
  • 2014-12-26
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 2021-01-15
  • 2016-11-09
相关资源
最近更新 更多