我在代码中声明了 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/