我有一个从apx绑定(bind)到的可观察数组:

var contacts = ko.observableArray(),

填充后,我将数组存储在哈希表中,因此不必再次从服务中检索值(这是一个非常缓慢的过程,因此,如果我不想重新检索已经检索的内容之前):
var toHash = contacts();
contactsHash[query] = toHash;

我的哈希表:
var contactsHash = {},

这是存储时我的可观察数组的样子(键是一个字符串):

这是我将其拉出的方法:
if (contactsHash[query]) {
     contacts.removeAll();
     var retrieved = contactsHash[query];
     contacts(retrieved);
}

这是我将其拉出时的外观:

这显然导致了我的问题,因为可观察的数组没有用我之前存储的数组填充...因此,在两者之间发生了一些困惑,我已经完全确定它们存储和访问的键是相同的也一样谁能指出这是怎么回事?

最佳答案

在JavaScript中,对象是通过引用传递的。当您调用contacts.removeAll();时,由于它们都指向内存中的同一对象,因此您也要清除contactsHash[query]

试试这个contactsHash[query] = toHash.slice();
代替contactsHash[query] = toHash;
编辑:slice()返回数组指定部分的浅拷贝。

10-06 07:52