JavaScript如何去除API返回结果中的重复节目标题?
解决API返回重复节目标题的去重问题
没问题,我帮你搞定这个重复标题的问题!核心思路就是跟踪已经处理过的标题,确保每个匹配的节目只返回一次。这里给你两种实用的解决方案:
方案一:用ES6 Set高效去重(推荐)
Set是专门用来存储唯一值的结构,检查元素是否存在的性能比数组高很多,非常适合这个场景:
var data = JSON.parse(request.responseText); const lateNightHosts = ['The Late Show with Stephen Colbert', 'Conan', 'Jimmy Kimmel Live']; // 初始化Set来记录已处理的标题 const seenShows = new Set(); // 建议用for...of遍历数组(如果data是数组的话,比for...in更安全) for (const item of data) { const title = item._embedded.show.name; // 同时满足两个条件:标题在目标列表里,且还没被处理过 if (lateNightHosts.includes(title) && !seenShows.has(title)) { // 这里写你要执行的逻辑,比如返回标题、打印等 console.log(title); // 把已处理的标题加入Set,避免后续重复处理 seenShows.add(title); } }
方案二:用数组手动去重(兼容旧环境)
如果你的环境不支持ES6 Set,可以用数组来记录已处理的标题:
var data = JSON.parse(request.responseText); const lateNightHosts = ['The Late Show with Stephen Colbert', 'Conan', 'Jimmy Kimmel Live']; const seenShows = []; for (const item of data) { const title = item._embedded.show.name; if (lateNightHosts.includes(title) && seenShows.indexOf(title) === -1) { console.log(title); seenShows.push(title); } }
小提示
- 尽量用
for...of代替for...in遍历数组:for...in会遍历对象的所有可枚举属性,可能会拿到数组的额外属性(比如自定义的原型属性),而for...of只遍历数组的元素,更安全。 - 如果你的
lateNightHosts数组很大,还可以把它转成Set,这样includes的检查性能会更高:const lateNightHostsSet = new Set(lateNightHosts);,然后用lateNightHostsSet.has(title)来判断。
内容的提问来源于stack exchange,提问作者miranda
相关产品推荐
相关产品推荐

