【问题标题】:Deepcopying observable array knockout深度复制可观察数组敲除
【发布时间】:2016-11-01 17:40:47
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript jquery arrays knockout.js


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如何进行深度复制(或以其他方式确保数组未链接): https://jsfiddle.net/t5a1xfud/18/

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

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

      self.newItems(self.existingItems());
      

      请注意,在第二个示例中,使用“复制到新”按钮后,数组将被链接。它们似乎没有链接,但是如果您在“添加到现有”和“添加到新”之间交替单击,您会看到它们确实会相互影响。第一个例子不是这样。

      【讨论】:

        猜你喜欢
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-21
        • 2011-12-12
        • 1970-01-01
        • 2016-11-02
        • 2016-07-27
        相关资源
        最近更新 更多