1
我知道localstorage只是一個簡單的散列圖,getItem
and setItem
。如果我的項目是一個JSON數組,並且我只想在數組的末尾添加一個項目會怎麼樣?有沒有比調用setItem
多一個條目更有效的方法?添加/追加項目到本地存儲/網絡存儲?
我知道localstorage只是一個簡單的散列圖,getItem
and setItem
。如果我的項目是一個JSON數組,並且我只想在數組的末尾添加一個項目會怎麼樣?有沒有比調用setItem
多一個條目更有效的方法?添加/追加項目到本地存儲/網絡存儲?
不幸的是沒有。
localStorage
僅支持string
類型,因此您必須在保存之前先對JSON進行排序,這意味着您需要先加載並解析它,然後才能向其添加任何內容。
你可以寫一個簡單的包裝要做到這一點(可支持各種類型):
function appendItem(key, data) {
var t = data.constructor, tmp;
switch(t) {
case Array:
tmp = localStorage.getItem(key);
tmp = (tmp === null) ? [] : JSON.parse(tmp);
tmp.push(data);
localStorage.setItem(key, JSON.stringify(tmp));
break;
case String:
//... and so forth
}
}
(錯誤和同類型檢查也必須在這種方法中實現)。
(可選)您可以使用延遲寫入方法,以便您可以更高效地填充陣列(突發寫入),並且僅在需要時將數據更新爲localStorage
。在這裏您可以初始加載現有的數組,然後在數據添加到數組時進行更新。
您可以烤到這一點對每個數組的對象,但是爲了簡單:
var a = []; //load existing array at init
var timer;
var key = 'myArray';
//append data to array and re-start timer
function appendArray(item) {
clearTimeout(timer);
a.push(item);
timer = setTimout(writeData, 2000); //wait 2 seconds to write last append(s)
}
//write the data if dirty
function writeData() {
localStorage.setItem(key, JSON.stringify(a));
}
爲了安全,你可以訂閱window.onunload
事件,當用戶離開當前頁面離開做最後的寫操作。