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

LocalStorage 本身不提供去重功能,需要手动判断并维护唯一性。核心思路是:读取已有记录 → 过滤重复项 → 插入新条目(若不存在)→ 重新保存。
用数组管理搜索历史,插入前检查是否已存在
把搜索历史存为 JSON 数组,每次新增前先判断是否已在数组中:
- 从 localStorage 读取字符串,JSON.parse() 转为数组(注意捕获解析错误)
- 用 Array.includes() 或 Array.some() 判断新关键词是否已存在
- 不存在则 unshift() 插入开头(保持最新在前),再 JSON.stringify() 写回
限制数量并自动截断,避免无限增长
搜索历史通常只需保留最近 N 条(如 10 条),插入后可主动截断:
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
- 插入新词后,用 array.slice(0, 10) 取前 10 项
- 避免用 splice() 原地修改后再 slice,容易出错
- 截断操作放在保存前,确保写入的是精简后的数组
大小写与空格处理,提升去重合理性
用户可能输入 “js” 和 “JS”,应视为同一搜索词:
立即学习“Java免费学习笔记(深入)”;
- 统一转为小写比较: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));
}
}

















