Skip to content

Instantly share code, notes, and snippets.

@allenhwkim
Last active January 24, 2024 14:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save allenhwkim/5a851ad5185538a9169a2b1a4735bd84 to your computer and use it in GitHub Desktop.
Save allenhwkim/5a851ad5185538a9169a2b1a4735bd84 to your computer and use it in GitHub Desktop.
session storage data management
class Storage {
static getItem(key) {
if (key.match(/^([a-z0-9]+)\[['"]?(.*?)['"]?\]$/i)) { // array format e.g., groupName["foo"]
const [_, groupKey, itemKey] = key.match(/^([a-z0-9]+)\[['"]?(.*?)['"]?\]$/i);
const storageData = sessionStorage.getItem(groupKey);
const storageObj = JSON.parse(storageData);
return storageObj?.[itemKey];
} else if (key.match(/^([a-z0-9]+)\.([a-z0-9]+)/i)) { // key format groupName.foo
const [groupKey, itemKey] = key.split('.');
const storageData = sessionStorage.getItem(groupKey);
const storageObj = JSON.parse(storageData);
return storageObj?.[itemKey];
} else {
const storageData = sessionStorage.getItem(key);
const storageObj = JSON.parse(storageData);
return storageObj;
}
}
static setItem(key, data) {
if (key.match(/^([a-z0-9]+)\[['"]?(.*?)['"]?\]$/i)) { // array format e.g., groupName["foo"]
const [_, groupKey, itemKey] = key.match(/^([a-z0-9]+)\[['"]?(.*?)['"]?\]$/i);
const storageData = sessionStorage.getItem(groupKey);
const storageObj = JSON.parse(storageData) || [];
storageObj[itemKey] = data;
return sessionStorage.setItem(groupKey, JSON.stringify(storageObj));
} else if (key.match(/^([a-z0-9]+)\.([a-z0-9]+)/i)) { // key format groupName.foo
const [groupKey, itemKey] = key.split('.');
const storageData = sessionStorage.getItem(groupKey);
const storageObj = storageData ? JSON.parse(storageData) : {};
storageObj[itemKey] = data;
return sessionStorage.setItem(groupKey, JSON.stringify(storageObj));
} else {
return sessionStorage.setItem(key, JSON.stringify(data));
}
}
static removeItem(key) {
if (key.match(/^([a-z0-9]+)\[['"]?(.*?)['"]?\]$/i)) { // array format e.g., groupName["foo"]
const [_, groupKey, itemKey] = key.match(/^([a-z0-9]+)\[['"]?(.*?)['"]?\]$/i);
const storageData = sessionStorage.getItem(groupKey);
const storageObj = JSON.parse(storageData) || [];
storageObj.splice(itemKey, 1);
return sessionStorage.setItem(groupKey, JSON.stringify(storageObj));
} else if (key.match(/^([a-z0-9]+)\.([a-z0-9]+)/i)) { // key format groupName.foo
const [groupKey, itemKey] = key.split('.');
const storageData = sessionStorage.getItem(groupKey);
const storageObj = JSON.parse(storageData);
delete storageObj[itemKey];
return sessionStorage.setItem(groupKey, JSON.stringify(storageObj));
} else {
return sessionStorage.removeItem(key);
}
}
}
// Usage
Storage.setItem("foo", {hello:'world'})
Storage.getItem('foo') // {hello: 'world'}
Storage.setItem("foo.hello", 'Yuhan')
Storage.getItem('foo.hello') // 'Yuhan'
Storage.getItem('foo') // {hello: 'Yuhan'}
Storage.removeItem('foo.hello');
Storage.getItem('foo'); // {}
Storage.removeItem('foo');
Storage.getItem('foo'); // undefined
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment