即使我没有对其执行任何操作,数组值也会以负值更改

时间:2017-08-21 05:52:26

标签: javascript angularjs arrays

我在tmp变量中分配了$scope.option值,并在使用负值更改$scope.option的所有值后对tmp变量执行操作。



var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
  
  $scope.options=[1,2,3];
  
  var tmp = $scope.options; 
  
  for(var i=0;i<tmp.length;i++){
    tmp[i] = tmp[i]*-1;
  }
  
  console.log($scope.options);
  
  document.getElementById("p1").innerHTML = $scope.options;
   
   
});
&#13;
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

<p id="p1"></p>

</div>
</body>
</html>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:3)

不要使用var tmp = $scope.options;复制值,而是使用angular.copy()

&#13;
&#13;
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
  
  $scope.options=[1,2,3];
  
  var tmp = angular.copy($scope.options); 
  
  for(var i=0;i<tmp.length;i++){
    tmp[i] = tmp[i]*-1;
  }
  
  console.log($scope.options);
   
});
&#13;
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body>

<div ng-app="myApp" ng-controller="myCtrl">

<p ng-repeat="option in options">{{ option }}</p>

</div>
</body>
</html>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

使用angular.copy();函数将对象/数组复制到另一个临时数组

答案 2 :(得分:0)

在JavaScript中,当您将数组分配给变量时,您不会复制它 - 该变量指向相同的数组。因此,当您通过访问索引tmp来修改数组的元素时,实际上是在修改原始数组的给定元素。

换句话说,tmp$scope.options都引用相同的数组。

如果您希望tmp获取$scope.options引用的数组的副本,请使用slice()函数:

var tmp = $scope.options.slice();

基本上,slice()克隆原始数组并返回对新数组的引用。现在,您可以修改tmp中的元素,而无需修改$scope.options

中的元素