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

时间:2013-01-28 13:54:30

标签: 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在复制后保持原样。我怎样才能实现它?如果我做了任何更改,我只是跟踪它。如果更改了数组,那么我将在我的代码中启用按钮。目前我不知道如何进行脏跟踪,因此找到了这个替代但不起作用。请帮忙。

2 个答案:

答案 0 :(得分:1)

您可以使用slice功能:

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

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

答案 1 :(得分:1)

尝试:

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