下面是我将数组内的对象更改为字符串的代码。无法弄清楚为什么它会影响原始数组。 slice 应该克隆数组,如果我是对的?
var cloned = $scope.selected.items.slice(0);
cloned.forEach(function (cluster) {
cluster.status = cluster.status.name;
})
ObjToPost.MO = cloned;
console.log("consoling the cluster list", ObjToPost.MO);
console.log("consoling the original cluster list", $scope.selected.items);
安慰后两个数组是相同的
引用 MDN 上的Array.prototype.slice,
The slice()
方法将数组的一部分的浅拷贝返回到新的数组对象中。
这里重要的词是“浅拷贝”。它创建一个新数组并使数组的元素指向同一个对象。
在您的情况下,即使在切片之后,原始数组和克隆数组中的每个数组元素都引用内存中相同的簇对象。
Original Cloned
+-----+ +-----+
| 0 |--> Cluster Object 1 <--| 0 |
+-----+ +-----+
| 1 |--> Cluster Object 2 <--| 1 |
+-----+ +-----+
| 2 |--> Cluster Object 3 <--| 2 |
+-----+ +-----+
由于所有相应的元素都引用相同的对象,因此通过一个数组对其进行更改也会反映在另一个数组中。
Note:如果您正在寻找一种进行深复制的方法,那么您可能需要检查这个问题.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)