我在数组中引用了一个JS对象(例如var arr = [{hello:"world"}]; var ref = arr[0]
)。我需要用一个新对象替换该对象。 (实际上它是来自先前时间的对象的备份,例如当用户单击放弃更改时)。既然JS对象是通过引用传递的,我不能只做ref = angular.copy(backupObject)
。这个问题如下所示。
控制台的简单输出显示问题。
x = {hello:"world"}
> Object {hello: "world"}
y = x
> Object {hello: "world"}
y = {goodbye:"world"}
> Object {goodbye: "world"}
x
> Object {hello: "world"}
在这里,您可以看到将第二个变量设置为另一个对象实际上并不会更改第一个对象。它只是一个新的。
有没有办法可以使用引用它的变量替换数组中的原始对象?当然,显而易见的答案是只更改原始数组。但是,在我的代码中,如果我不必跟踪对象和位置,那将会简单得多。
我想我可以写一个这样的循环:
for(key in ref){
delete ref[key];
}
for(key in backupObj){
ref[key] = backupObj[key]
}
但我想知道是否有更快的方法。
答案 0 :(得分:0)
您可以像这样使用angular.copy
angular.copy(backupObject, ref);
angular.copy(source, [destination]);
如果提供了目标,则会删除其所有元素(对于数组)或属性(对象),然后将源中的所有元素/属性复制到该目标。