如何创建挖空可观察数组/对象的深层副本

how to create deep copy of knockout observable array / object

本文关键字:对象 数组 副本 观察 何创建 创建      更新时间:2023-09-26
function getModified(lineData) {
  var newObject = $.extend(true, {}, lineData);               
  newObject.Lines('test')
};

我已经将可观察数组扩展到新的变量 新对象 .但是如果我在 newObject 中更改任何内容,更改也会反映到 LineData 中。

简而言之,如何创建不会更新 lineData 的可观察数组的深层副本。如果我修改新对象。

ko.utils.clone = function (obj) {
    var target = new obj.constructor();
    for (var prop in obj) {
        var propVal = obj[prop];
        if (ko.isObservable(propVal)) {
            var val = propVal();
            if ($.type(val) == 'object') {
                target[prop] = ko.utils.clone(val);
                continue;
            }
            target[prop](val);
        }
    }
    return target;
};

这是我的解决方案,希望对您有所帮助。

// obj is your viewModel object.