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

Rag*_*ngh 3 javascript arrays foreach reference angularjs

我处境很奇怪.我有一个对象数组,我使用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"}]
Run Code Online (Sandbox Code Playgroud)

现在,当我重复sc.genie,我已经在一个新的变量考虑它已经"每一个",然后我改变" 价格每个数组未定义但"键点,当我在价格SC的控制台值看.精灵也变成了"未定义".咦!

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

谢谢

Sha*_*Roy 7

angular.copy当每个值的变化不影响原始值时,您应该使用.因为angular.copy在没有引用的情况下在新变量中赋值旧值.

喜欢:

var each ;
each = angular.copy(sc.genies);
Run Code Online (Sandbox Code Playgroud)

代替

each = sc.genies;
Run Code Online (Sandbox Code Playgroud)


Dav*_*bec 5

有一个简单的答案。“两个”值之所以改变,是因为它实际上是同一个对象。val该行中的变量angular.forEach(each,function(val,key){ ...包含一个指向对象的指针。它不是另一个物体。它是同一个对象,只是通过不同的变量名访问。

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

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

 var copy = JSON.parse(JSON.stringify(originalObject));
Run Code Online (Sandbox Code Playgroud)

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