LocalStorage需手动实现搜索历史去重:读取JSON数组→标准化新词(trim+toLowerCase)→检查是否存在→不存在则unshift插入→截取前10项→写回。

LocalStorage 本身不提供去重功能,需要手动判断并维护唯一性。核心思路是:读取已有记录 → 过滤重复项 → 插入新条目(若不存在)→ 重新保存。
用数组管理搜索历史,插入前检查是否已存在
把搜索历史存为 JSON 数组,每次新增前先判断是否已在数组中:
- 从 localStorage 读取字符串,JSON.parse() 转为数组(注意捕获解析错误)
- 用 Array.includes() 或 Array.some() 判断新关键词是否已存在
- 不存在则 unshift() 插入开头(保持最新在前),再 JSON.stringify() 写回
限制数量并自动截断,避免无限增长
搜索历史通常只需保留最近 N 条(如 10 条),插入后可主动截断:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 插入新词后,用 array.slice(0, 10) 取前 10 项
- 避免用 splice() 原地修改后再 slice,容易出错
- 截断操作放在保存前,确保写入的是精简后的数组
大小写与空格处理,提升去重合理性
用户可能输入 “js” 和 “JS”,应视为同一搜索词:
- 统一转为小写比较:newTerm.toLowerCase()
- 去除首尾空格:newTerm.trim()
- 比较时对历史数组每一项也做同样处理,再判断是否重复
封装成可复用函数,减少重复逻辑
把读、判重、写、截断封装成一个函数,调用简洁:
function addSearchHistory(term) {const key = 'searchHistory';
let list = JSON.parse(localStorage.getItem(key) || '[]');
const normalized = term.trim().toLowerCase();
if (!list.some(item => item.trim().toLowerCase() === normalized)) {
list.unshift(term); // 保留原始格式显示
list = list.slice(0, 10);
localStorage.setItem(key, JSON.stringify(list));
}
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










