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

copying 2 observable arrays and then comparing

本文关键字:然后 比较 数组 观察 复制      更新时间:2023-09-26

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

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

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

 self.copiedSavedVersionData(self.versionDataByProduct());

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

 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 将克隆数组。

尝试:

ko.utils.arrayPushAll(self.copiedSavedVersionData, self.versionDataByProduct());