Last active
January 24, 2024 14:30
-
-
Save allenhwkim/5a851ad5185538a9169a2b1a4735bd84 to your computer and use it in GitHub Desktop.
session storage data management
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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