localStorage里面怎么累加往里加数据

怎么往list里累加对象啊

{
    list:[
        {
            id:'11',
            name:'a'
        },
        {
            id:'22',
            name:'b'
        },
        {
            id:'33',
            name:'c'
        }
    ]
}
阅读 6.2k
5 个回答

同楼上一样的,重复取存的操作。每次调用方法即可

// data是需要累加的数据
function setStore(data) {
    const list = JSON.parse(localStorage.getItem('list')) || []
    list.push(data)
    localStorage.setItem('list', JSON.stringify(list))
}

取 -> 解析 -> push -> 序列化 --> 存

新手上路,请多包涵

localStorage 先存,再取,再存

         以上每一步皆可百度

单窗口操作: js单线程,所以没有数据覆盖的情况。
多窗口操作: 多窗口之间按Id从小到大轮询执行 读写localstorage。

每次打开新窗口设置窗口Id,Id递增。
active指示当前激活的Id。如active:3。 代表3号窗口可以写localstorage

json={
    arr:[1,2,3,4,5]
    active:3
}

本窗口要写数据,直接push 到事件队列Arr,等待storage对active监听事件里才执行。

storageEvent监听事件里判断active是否等于本窗口的Id
如果等于那么就执行本窗口挂起的事件队列Arr。 执行完后(写完了localstorage)。设置 active++ 。

类似于轮播图。轮到谁,谁就有权限读写localstorage。

如楼上(好热闹的样子)。
顺序的事情不用担心, localStorage 是同步的,你按顺序写,它就按顺序存,不会乱。
担心频繁存取的话,有两个方法:

  1. 使用一个单例来读写 localStorage,并对写入进行节流(push完了别慌写到 localStorage, 先定个延时器等个几秒钟再写,如果这中间发生了其他的push操作,就销毁定时器,执行新的push,完事了再开一个延时器等几秒……周而复始);
  2. 同样还是使用单例来读写,但是 push 和写入分开写,另外写一个专门用来写入的函数,就命名为 commit 吧,你什么时候想写到 localStorage 了,再调用 commit 写入;
  3. 如果有多页面读写需求的话,可以仿造“锁”的概念,一个时间片内只允许一个页面写入,鉴于storage 写入是可以跨页面监听的,这把锁不难实现;
  4. 多页面情况下,为防突然的关闭导致数据丢失,可以每个页面开一个键作为暂存区,然后下一个页面写入的时候顺便把其他暂存的数据也合并一下。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题