js需要把搜索词组成json格式放入本地缓存,但是现在新增是覆盖不是追加,求解?

发布于 2022-09-06 06:51:25 字数 923 浏览 19 评论 0

需求:
把每次搜索的关键词组成json格式放入localstorage,然后加载这个json做成搜索历史,目前的问题是没一次放入localstorage都是新增覆盖了之前的(如下图),需要的是追加,求解!

// 新增搜索词存放localStorage
    var historyArr=[];
    function addSearchList(){
        var historyObj = {};
        var sInputVal = sInput.val();
        if(sInputVal.length != 0){
            historyObj.search_name = sInputVal;
            historyObj.search_address = 'search-filter.html?search=' + escape(sInputVal);
            console.log(historyArr.length);
            historyArr.push(historyObj);
            localStorage.setItem("searchhistory",JSON.stringify(historyArr));
        }
    }

clipboard.png

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

箹锭⒈辈孓 2022-09-13 06:51:25

先读取原来的数据,然后和新数据拼接在一起再覆盖不就行了吗。

小霸王臭丫头 2022-09-13 06:51:25

你这段代码在我本地执行时是正常的,你需要看看是不是哪里有代码会自动将historyArr置空。

嘦怹 2022-09-13 06:51:25

谢邀,每次加载页面的时候应该整个读取出来维护,最好只取一次作为唯一的源头,每次更新之后整个保存覆盖。

或者使用其它库处理 https://www.npmjs.com/browse/...

嘿嘿嘿 2022-09-13 06:51:25

提供给你一个自己写的公共方法,以验证。向localStorage中追加内容,不覆盖,且元素stringify后如果相同,则不追加

    appendLocal(key, obj) {
        if(obj == null) return;
        let temp, tempStr = '';
        try {
            if(localStorage.getItem(key) == null) throw new Error('空或undefined')
            temp = JSON.parse(localStorage.getItem(key));
        } catch(err) {
            // 当localStorage中没有对应key,或key对应内容为空、undefined,或parse出错时
            temp = [];
        }
        temp = temp.map((item) => {
            return JSON.stringify(item);
        });
        // 去重
        if(temp.indexOf(JSON.stringify(obj)) === -1) temp.push(JSON.stringify(obj));
        temp.forEach((item, index, arr) => {
            arr.length === index + 1 ? tempStr += `${item}` : tempStr += `${item},`;
        });
        localStorage.setItem(key, `[${tempStr}]`);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文