Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度在forEach或pure For时修改属性_Javascript_Angularjs_For Loop_Collections_Foreach - Fatal编程技术网

Javascript 角度在forEach或pure For时修改属性

Javascript 角度在forEach或pure For时修改属性,javascript,angularjs,for-loop,collections,foreach,Javascript,Angularjs,For Loop,Collections,Foreach,这是“砰砰”的一声: 我有两个系列 $scope.params = [{ id: 1, nombre: 'bloom' }, { id: 2, nombre: 'ctotal' }, { id: 3, nombre: 'coliformes' }]; $scope.puntos = [{ id: 1, nombre: 'votator'

这是“砰砰”的一声:

我有两个系列

 $scope.params = [{
        id: 1,
        nombre: 'bloom'
      }, {
        id: 2,
        nombre: 'ctotal'
      }, {
        id: 3,
        nombre: 'coliformes'
}];

$scope.puntos = [{
        id: 1,
        nombre: 'votator'
      }, {
        id: 2,
        nombre: 'vw1'
      }, {
        id: 3,
        nombre: 'preparador'
      }];
我在控制器中的代码如下所示:

angular.forEach($scope.puntos, function(punto, key) {
        punto.params = $scope.params;
        angular.forEach(punto.params, function(pa, key) {
            pa.otherProp = "xxxxx";
    });
});
如您所见,我想将params集合分配给puntos集合中的每个项。然后,我在otherProp属性中为集合中的项指定一个值……我从不更改主$scope.params……但如果我同时输出这两个参数,这也会更改

那么我的输出是:

Puntos

{"id":1,"nombre":"votator","params":[{"id":1,"nombre":"bloom","otherProp":"xxxxx"},{"id":2,"nombre":"ctotal","otherProp":"xxxxx"},{"id":3,"nombre":"coliformes","otherProp":"xxxxx"}]}
{"id":2,"nombre":"vw1","params":[{"id":1,"nombre":"bloom","otherProp":"xxxxx"},{"id":2,"nombre":"ctotal","otherProp":"xxxxx"},{"id":3,"nombre":"coliformes","otherProp":"xxxxx"}]}
{"id":3,"nombre":"preparador","params":[{"id":1,"nombre":"bloom","otherProp":"xxxxx"},{"id":2,"nombre":"ctotal","otherProp":"xxxxx"},{"id":3,"nombre":"coliformes","otherProp":"xxxxx"}]}
Params

{"id":1,"nombre":"bloom","otherProp":"xxxxx"}
{"id":2,"nombre":"ctotal","otherProp":"xxxxx"}
{"id":3,"nombre":"coliformes","otherProp":"xxxxx"}
起初我认为这个问题是由于使用angular.forEach造成的,所以我决定使用纯for…问题出现了

for (var i = 0; i < $scope.puntos.length; i++) {
    var punto = $scope.puntos[i];
    punto.params = [];
    punto.params = $scope.params;
    for (var j = 0; j < punto.params.length; j++){
      var pa = punto.params[j];
      pa.otherProp = 'yyyyyy';
    }
}
for(变量i=0;i<$scope.puntos.length;i++){
var punto=$scope.puntos[i];
punto.params=[];
punto.params=$scope.params;
对于(var j=0;j
当然,这是一个简单的例子…我真正想要的是更复杂的,但这阻止了我

为什么即使我没有手动更改params集合,它也会被修改? 怎么预防呢

提前感谢您执行以下操作:

 punto.params = $scope.params;
您不是复制集合,而是创建对集合的引用,因此punto.params是$scope.params,更改punto.params等同于更改$scope.params。您应该像这样复制对象:

 punto.params=angular.copy($scope.params);
那么foreach和更改punto.params将不会更改$scope.params。

执行以下操作:

 punto.params = $scope.params;
您不是复制集合,而是创建对集合的引用,因此punto.params是$scope.params,更改punto.params等同于更改$scope.params。您应该像这样复制对象:

 punto.params=angular.copy($scope.params);

那么foreach和changing punto.params将不会更改$scope.params。

您每次都分配相同的对象引用每次都分配相同的对象引用哇,我不知道……这是可行的!谢谢,当我能回答的时候,我会把这个标记为回答哇,我不知道……这很有效!谢谢,等我能回答的时候,我会把这个标记为已回答