我处境很奇怪。我有一个对象数组,我使用angular.forEach来修改每个对象的价格键值,但是当我在每个对象中更改它时,它也会改变主数组对象。
查看代码,然后您将了解我想说的内容。
function quiz_test($conn) {
...
}
现在当我重复sc.genie时,我已经把它变成了一个已经“每个”的新变量,然后我将每个数组的“ price ”键更改为undefined但 strange 点是当我在控制台中看到sc.genies中的价格价值也变为“未定义”。咦!
我希望你明白我的意思,请帮助我为什么会这样。
由于
答案 0 :(得分:7)
当每个值的更改不影响原始值时,您应该使用angular.copy
。因为angular.copy
在没有引用的情况下为新变量赋值。
像:
var each ;
each = angular.copy(sc.genies);
而不是
each = sc.genies;
答案 1 :(得分:3)
有一个简单的答案。 “两个”值发生变化的原因是因为它实际上是同一个对象。此行val
中的变量angular.forEach(each,function(val,key){ ...
包含指向对象的指针。这不是另一个对象。它是同一个对象,只能通过不同的变量名访问。
如果您确实希望original
和working copy
成为不同的对象,则需要手动创建具有相同值的新实例。
您可以创建这样的对象的副本(适用于简单对象):
var copy = JSON.parse(JSON.stringify(originalObject));
或如上面的评论中所指出的,您可以使用angular.copy(source, destination)
。请参阅文档https://docs.angularjs.org/api/ng/function/angular.copy