【发布时间】:2016-11-02 01:58:58
【问题描述】:
我有一个可观察数组嵌套在另一个可观察数组下,这个数组绑定到 UI。
单击按钮时,我将主可观察数组复制到 jquery 数组并进行一些操作,但是当我更改新 jquery 数组时,我的旧可观察数组项正在更改。
下面是sn-p。
-
可观察数组
var masterArray = ko.observableArray([{"name" : "Tom", "lastName" : "Jerry", "license" : ko.observableArray([1,2,3])}, {"name" : "Jack", "lastName" : "Sparrow", "license" : ko.observableArray([4,5,6])}]); -
深度复制到普通的 Jquery 数组
var clonedArr = $.extend(true, [], masterArray()); -
更改新数组中的值会影响旧数组。
clonedArr[0].license(7); console.log("after deep copy: "+ masterArray()[0].license())
我做错了吗?见 jsfiddle https://jsfiddle.net/hdrrd7gj/
【问题讨论】:
-
我认为您必须手动查看源可观察数组,以查看其子内容是原始数据还是对象,并且需要确定克隆逻辑。
$.extend()真的不知道淘汰赛框架。所以你必须为这种深度克隆编写自己的逻辑。 -
你真的应该编辑你的旧问题而不是发布一个问题。 stackoverflow.com/questions/38109341/…
标签: jquery arrays knockout.js