Deepcopying可观察数组淘汰赛

时间:2016-06-29 20:20:39

标签: javascript jquery arrays knockout.js

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

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

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

我错过了什么。你可以在这里找到jsfiddle(https://jsfiddle.net/t5a1xfud/)了解更多详情

2 个答案:

答案 0 :(得分:0)

您需要以$ .extend不修改原始数组的方式合并空数组和原始数组。
示例: https://jsfiddle.net/kyr6w2x3/18/

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

答案 1 :(得分:0)

如何深层复制(或以其他方式确保数组没有链接): https://jsfiddle.net/t5a1xfud/18/

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

如何不深拷贝(还有其他方法): https://jsfiddle.net/t5a1xfud/19/

self.newItems(self.existingItems());

请注意,在使用"复制到新的"之后的第二个示例中按钮,数组将被链接。它们似乎没有链接,但是如果您在"添加到现有"之间进行交替点击。和"添加到新的"你会发现它们确实会影响到彼此。与第一个例子不同。