javascript - 复制 2 个可观察数组然后进行比较

标签 javascript jquery knockout.js

我在代码中声明了 2 个可观察数组,如下所示

self.versionDataByProduct = ko.observableArray([]);
self.copiedSavedVersionData = ko.observableArray([]);

当我保存数据时,我将所有值从 self.versionDataByProduct 复制到 self.copiedSavedVersionData 中,如下所示

 self.copiedSavedVersionData(self.versionDataByProduct());

然后我尝试比较名为compareArray的按钮事件上的2个可观察数组,如下所示

 this.compareArray = function () {
        debugger;
        var results = [];
        var differences = ko.utils.compareArrays(self.versionDataByProduct(), self.copiedSavedVersionData());
        ko.utils.arrayForEach(differences, function (difference) {
            if (difference.status === "deleted") {
                results.push(difference.value);
            }
        });
        return results;
    };

但这不起作用。因为在我将一个可观察数组复制到另一个可观察数组并在可观察数组中进行一些修改后,它会自动更新其他数组。我不想那样。我希望我的可观察数组 self.copiedSavedVersionData 在复制后保持原样。我怎样才能实现它?我只是跟踪我是否做了任何更改。如果数组发生更改,那么我将在代码中启用按钮。目前我不知道如何进行脏跟踪所以找到了这个替代方案但不起作用。请帮忙。

最佳答案

您可以使用 slice 函数来实现此目的:

 self.copiedSavedVersionData(self.versionDataByProduct().slice(0));

在这种情况下,ko 将克隆数组。

关于javascript - 复制 2 个可观察数组然后进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14563575/

相关文章:

javascript - 如何获取我自己的 Google Drive 文件的 md5Checksum 字段(仅使用类和对象,不使用 http 请求)?

javascript - Firefox 似乎在更新 DOM 之前等待异步 ajax 完成

javascript - 如果根据唯一条件 javascript 在数据库中插入重复条目,则发出警报

javascript - jQuery keypress() 处理程序 : managing flow of events

javascript - 提高第三方应用程序的可用性

javascript - 创建后 knockout 绑定(bind)

javascript - 在 Firefox 中点击 input inside 按钮

c# - jQuery中触发文本框的change事件

javascript - formatter.js 覆盖 knockout 值

javascript - 根据其他单元格的状态使剑道网格单元格可编辑或只读