深度复制可观察数组

Deepcopying observable array knockout

本文关键字:数组 观察 复制 深度      更新时间:2023-09-26

我有一个绑定到UI的可观察对象,点击按钮,我从可观察数组中创建一个新数组,并对新数组进行操作,但不幸的是,新数组的任何更改也会影响旧数组。

我使用下面的代码进行深度复制。

   var clonedArr = $.extend(true, [], masterArray());

我错过了什么吗?您可以在这里找到jsfiddle (https://jsfiddle.net/t5a1xfud/)了解更多详细信息

您需要合并空数组和您的原始数组的方式$。扩展不会修改您的原始文件。
例子: https://jsfiddle.net/kyr6w2x3/18/

var newArr = [];
newArr = $.extend( [], self.Array(), newArr );

如何深度复制(或者确保数组不被链接):https://jsfiddle.net/t5a1xfud/18/

self.newItems(ko.toJS(self.existingItems()));

如何避免深度复制(也有其他方法):https://jsfiddle.net/t5a1xfud/19/

self.newItems(self.existingItems());

注意,在第二个例子中,当你使用"Copy to new"按钮后,数组将被链接。它们似乎没有链接,但如果你在"添加到现有"answers"添加到新"之间交替点击,你会发现它们确实相互影响。第一个例子不是这样的