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