我正在從一個陣列項目的方式,只要它不存在,那麼存儲失敗後,在localStorage
的JavaScript Array.indexOf()使用本地存儲
var queue = [];
function moveToQueue(item) {
if(queue.indexOf(item) == -1) {
queue.push(item);
store();
}
}
function store() {
localStorage.myApp_queue = JSON.stringify(queue);
}
頁面加載時,我打電話給我的加載功能。
function load() {
if(typeof localStorage.myApp_queue != 'undefined') {
queue = JSON.parse(localStorage.myApp_queue);
}
}
在這一點上,我的界面顯示queue
,因爲我已經離開了最後,但如果我嘗試再次添加同一項目中,「queue.indexOf(項目)」失敗。 queue
的內容與調用store()/load()
方法之前的內容不同。
以下是我的頁面重新加載之前和之後的一些console.log()
調用,從空的queue
開始。日誌已經被添加到moveToQueue
功能開始
function moveToQueue(item) {
console.log('adding to queue');
console.log(item);
console.log(queue[0]);
console.log(queue.indexOf(item));
...
初始負載:
adding to queue
e {id: 1, status: "A", title: "Comcar", $$hashKey: "004", $get: function…}
undefined
-1
adding to queue
e {id: 1, status: "A", title: "Comcar", $$hashKey: "004", $get: function…}
e {id: 1, status: "A", title: "Comcar", $$hashKey: "004", $get: function…}
0
頁面刷新後 - 我推的項目已經是queue
陣列中
adding to queue
e {id: 1, status: "A", title: "Comcar", $$hashKey: "006", $get: function…}
Object {id: 1, status: "A", title: "Comcar", $$hashKey: "004"}
-1
我在這裏錯過了什麼,localStorage
和JSON
做什麼來改變我的陣列。
我可以看到日誌列出從存儲返回的項目爲「對象」,而原始項目具有「類型」(不太確定)「e」。
如果我使用typeof
兩個結果是「對象」
啊,我剛剛意識到一些事情。原來的項目有getter,setter等,它們似乎是真正的javascript對象。那些在localStorage中進行解析/解析的只是簡單的字典/鍵值對!所以我需要阻止他們成爲複雜的對象?我想 – 2013-02-19 12:33:36
我在我的代碼所做的更改,現在它將爲複雜對象的工作太:-) – 2013-02-19 12:58:09