有这样一种场景,需要将Localstorage做业务上的分层Level1、Level2,当Localtrage满的时候,优先清理Level低的数据。
const Storage = { level: deserialize(localStorage.getItem('level')) || [], level2: deserialize(localStorage.getItem('level2')) || [], // 设置level1中的数据 setlevel: function (key, val) { if (!localStorage.getItem(key)) { this.level.push(key) localStorage.setItem('level', serialize(this.level)) } localStorage.setItem(key, serialize(val)) }, // 得到level1中的数据 getlevel: function (key) { let val = deserialize(localStorage.getItem(key)) return val }, // 设置level2中的数据 setlevel2: function (key, val) { if (!localStorage.getItem(key)) { this.level.push(key) localStorage.setItem('level2', serialize(this.level)) } localStorage.setItem(key, serialize(val)) }, // 得到level2中的数据 getlevel2: function (key) { let val = deserialize(localStorage.getItem(key)) return val }, // 删除level1中的数据 removelevel: function () { var level = this.level let removeLevel = [...new Set(level)].map((item) => { localStorage.removeItem(item) }) localStorage.setItem('level', serialize([])) this.level = [] }, // 删除level2中的数据 removelevel2: function () { var level = this.level let removeLevel2 = [...new Set(level)].map((item) => { localStorage.removeItem(item) }) localStorage.setItem('level2', serialize([])) this.level2 = [] }, } // 转成JSON字符串 function serialize(val) { return JSON.stringify(val) } // 转成初始类型 function deserialize(val) { if (typeof val !== 'string') { return undefined } try { return JSON.parse(val) } catch (e) { return val || undefined } }