当更改复制变量的值时,它也在更改 AngularJS 中的主变量值

when changing value of copied variable it is also changing main variable value in angularjs

本文关键字:AngularJS 变量值 变量 复制      更新时间:2023-09-26

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

看看代码,你就会明白我想说什么。

var option_1_val = $scope.options.option_1_val;
        var option_2_val = $scope.options.option_2_val;
        console.log('genies',sc.genies);
        var new_arr = [];
        var each ;
        each = sc.genies;
        angular.forEach(each,function(val,key){
            var ob = {};
            ob = val;
            var priceA = angular.fromJson(ob.price);
            console.log('price',priceA);            
            var option = option_1_val.replace(" ","-")+","+option_2_val.replace(" ","-");
            console.log(option);
            ob.price = priceA[option];
            console.log(ob);
            new_arr.push(ob);
        });
option = 'Non-Vegetarian,' (after calculating)
sc.genies = [{"gs_id":"3","user_id":"25","service_id":"7","price":"{'"Vegetarian,Bengali'":'"200'",'"Vegetarian
,Chinese'":'"3100'",'"Vegetarian,Gujarati'":'"800'",'"Vegetarian,Italian'":'"100'",'"Vegetarian,Maharashtrian
'":'"100'",'"Vegetarian,Punjabi'":'"100'",'"Vegetarian,-South-Indian'":'"300'",'"Vegetarian,Thai'":'"100
'",'"Non-Vegetarian,Bengali'":'"1100'",'"Non-Vegetarian,Chinese'":'"3100'",'"Non-Vegetarian,Gujarati
'":'"100'",'"Non-Vegetarian,Italian'":'"100'",'"Non-Vegetarian,Maharashtrian'":'"100'",'"Non-Vegetarian
,Punjabi'":'"100'",'"Non-Vegetarian,-South-Indian'":'"80'",'"Non-Vegetarian,Thai'":'"100'",'"Jain,Bengali
'":'"2100'",'"Jain,Chinese'":'"2100'",'"Jain,Gujarati'":'"4100'",'"Jain,Italian'":'"100'",'"Jain,Maharashtrian
'":'"100'",'"Jain,Punjabi'":'"100'",'"Jain,-South-Indian'":'"800'",'"Jain,Thai'":'"100'"}","min_price"
:"80","max_price":"4100","username":"abdul quadir","email":"abdul.quadir@kiozen.com","rating":"3"}]

现在当我重复 sc.genie 时,我已经在一个新的变量中采用了它,已经"每个",然后我将每个数组的"价格"键更改为未定义,但奇怪的一点是当我在控制台中看到 sc.genies 中的价格值也更改为"未定义"。哼!

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

谢谢

当每个值的更改不影响原始值时,您应该使用 angular.copy 然后。 因为angular.copy在新变量中分配旧值而不引用。

喜欢:

var each ;
each = angular.copy(sc.genies);

而不是

each = sc.genies;

有一个简单的答案。"两个"值变化的原因是因为它实际上是同一个对象。此行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