我需要在javascript中创建一个数组的副本,以便两个数组的地址应该不同。如何能不能做到..角js - 复制对象没有被引用被复制
我已经试过
$scope.users = data.users;
$scope.usersTemp = [];
$scope.usersTemp.push($scope.users);
and
$scope.usersTemp = $scope.usersTemp
我需要在javascript中创建一个数组的副本,以便两个数组的地址应该不同。如何能不能做到..角js - 复制对象没有被引用被复制
我已经试过
$scope.users = data.users;
$scope.usersTemp = [];
$scope.usersTemp.push($scope.users);
and
$scope.usersTemp = $scope.usersTemp
您是否尝试过与angular.copy
?喜欢的东西:
$scope.usersTemp = angular.copy($scope.usersTemp)
您可以使用:
angular.copy (myObjorArrayetc)
你正在尝试做的似乎是建立一个JS数组的浅拷贝。 如果这不是你的用例,请让我知道。
有几种方法在JS做到这一点
const copy = [...original]; // es6 only, uses Symbol.iterator
const copy = original.slice(); // slices the array from index 0,
// returning a shallow copy
const copy = Array.from(original, val => val); // es6 only, takes an
// array-like object with .length property and a map function
const copy = original.map(x => x);
// call to Array.prototype.map with identity function.
有了这些,你可以有:
const a = [1, 2];
const b = // shallow copy with one of the methods
a.push(3); // and b is still [1, 2]
关于其他的答案快速注意:快速看角文档here似乎以指示angular.copy返回一个深拷贝。
掌握它们之间的差异非常重要:浅拷贝只会创建一个新对象并将所有值放入其中,而深拷贝将尝试复制每个值。这意味着,因为JS中的对象是可变的,所以如果你创建一个浅拷贝,你仍然可以将其所有值与其他拷贝共享。深拷贝不是这种情况。
e.g:
const a1 = [{a: {b: 3}}];
const a2 = // shallow copy
(a1 === 2) // false
a1[0].a.b = 4 // reassign a prop of a value contained inside a1
(a1[0].a.b === 4) // true
如果深拷贝已经作出,一个新的对象就已经作出。
结论:根据您的用例使用您需要的内容。浅拷贝很快就会被制作出来,但会受到不必要的突变,深拷贝的创建成本要高得多,但不会受共享访问所导致的突变的影响。作为一个侧面说明,当然这两种方法对GC的影响(意思是浅拷贝不会释放对原始值中包含的值的引用)。
您可以使用
var copy = angular.copy(object);
它将使对象的确切副本。
在数组的情况下使用赋值操作时,副本和原始对象绑定更改。所以使用angular.copy(oldArray, newArray)
。
可能出现[Deep Copy Objects in angular?](http:// stackoverflow。com/questions/14360401/deep-copying-objects-in-angular) – Mistalis