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

需求:
把每次搜索的关键词组成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

阅读 3.5k
4 个回答

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

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

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

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

提供给你一个自己写的公共方法,以验证。向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}]`);
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题