为什么JavaScript自定义encrypt函数处理字符串时会出现重复输出问题?
问题分析
- 内容重复核心原因:长度大于等于4的分支中,你写了两层循环,外层遍历
accentArray的所有元素(共17个),内层每次都把原字符串除n之外的字符拼接一遍,相当于处理逻辑重复执行了17次,自然会出现内容重复问题。 - 逻辑缺失:你定义了重音检测数组
accentArray但完全没有调用,没有实现检测字符串是否包含重音的逻辑,也没有添加<strong>标签的相关处理。 - 边界判断冗余:长度等于4的情况会优先进入
<=4的分支,和你预设的分长度处理逻辑可能不符。 - 变量命名不规范:用JS内置对象名
String作为自定义变量名,容易引发上下文冲突。 - 初始值冗余:结果字符串初始值多写了一个空格,会导致输出开头多出多余空格。
修复后代码
var accentArray = ["á","à","ã","â","é","è","ê","í","ì","î","õ","ó","ò","ô","ú","ù","û"] function encrypt(str) { let result = "" // 检测字符串是否包含重音(可根据实际需求调整该逻辑的触发位置) const hasAccent = accentArray.some(accent => str.includes(accent)) if (str.length <= 4) { for (let i = 0; i < str.length; i++) { if (!["a","e","i","o","u"].includes(str[i])) { result += str[i] } } } else { // 长度大于4时过滤字符n,符合输入'atención'输出'ateció'的需求 for (let i = 0; i < str.length; i++) { if (str[i] != "n") { result += str[i] } } // 给结果添加strong标签 result = `<strong>${result}</strong>` } return result } console.log(encrypt('atención')); // 输出 <strong>ateció</strong>
内容的提问来源于stack exchange,提问作者Diego Donoso
相关产品推荐
相关产品推荐

