当改变复制变量的值时,它也改变angularjs中的主变量值

时间:2016-01-29 07:20:42

标签: javascript arrays angularjs foreach reference

我处境很奇怪。我有一个对象数组,我使用angular.forEach来修改每个对象的价格键值,但是当我在每个对象中更改它时,它也会改变主数组对象。

查看代码,然后您将了解我想说的内容。

function quiz_test($conn) {
    ...
}

现在当我重复sc.genie时,我已经把它变成了一个已经“每个”的新变量,然后我将每个数组的“ price ”键更改为undefined但 strange 点是当我在控制台中看到sc.genies中的价格价值也变为“未定义”。咦!

我希望你明白我的意思,请帮助我为什么会这样。

由于

2 个答案:

答案 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){ ...包含指向对象的指针。这不是另一个对象。它是同一个对象,只能通过不同的变量名访问。

如果您确实希望originalworking copy成为不同的对象,则需要手动创建具有相同值的新实例。

您可以创建这样的对象的副本(适用于简单对象):

 var copy = JSON.parse(JSON.stringify(originalObject));

或如上面的评论中所指出的,您可以使用angular.copy(source, destination)。请参阅文档https://docs.angularjs.org/api/ng/function/angular.copy

相关问题