如何在JavaScript数组中避免URL重复?附问题代码求助
解决URL数组去重及提示异常问题
你的代码里几个核心问题导致了提示混乱:
- 变量
checkLoop、existDoThis、i没加let/const声明,变成全局变量,多次执行时状态会互相干扰 - 数组长度判断
length > -1完全无效,因为数组长度永远≥0,这个条件永远为真 - 重复检查的循环逻辑错误:遍历数组时,只要遇到一个不匹配的元素就直接push,会导致同一个URL被多次添加;而且
existDoThis会被最后一次循环的结果覆盖,状态判断不准 - 多处重复调用
alertText,导致提示弹窗混乱
直接用数组原生的includes方法就能轻松解决去重问题,重构后的代码逻辑更清晰:
inputURL.forEach(e => { // 先处理输入,去除首尾空格并做非空校验 const url = e.value.trim(); if (!url) { alertText("failed", "你忘了输入URL!", "showAlert2", "alert2"); return; } dropAlert("alert2"); // 拿到当前要操作的URL数组 const urlArray = arrEps[typeEp.innerText]['url']; // 直接检查URL是否已存在 if (urlArray.includes(url)) { alertText("failed", "这个链接已经存在!", "showAlert2", "alert2"); } else { urlArray.push(url); alertText("success", "保存成功!", "showAlert2", "alert2"); console.log("新链接已添加"); } });
关键优化点:
- 用
trim()处理输入,避免空格导致的“假重复”(比如输入https://xxx.com和https://xxx.com会被误判为不同) includes()方法直接检查数组中是否存在目标URL,比手动循环简洁且不易出错- 所有变量用
const声明为局部变量,避免全局状态污染 - 逻辑分支清晰:非空校验→存在性检查→对应提示/添加,不会出现重复弹窗的情况
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

