JS实现字符出现次数统计替换为(或)功能 数组push方法调用报错求解
问题诊断与修复方案
原代码存在的问题
- 变量类型错误:
count初始化为数字0,但你需要用对象存储每个字符的计数,数字类型无法添加字符属性存储统计值。 - 未初始化结果数组:调用
output.push前没有声明output数组,会触发引用错误。 - 方法调用语法错误:
push是数组方法,需要用小括号传参(如push('(')),你用的方括号是属性访问语法,无法触发方法执行。 - 逻辑顺序错误:不能边统计字符次数边生成输出结果,必须先完成全字符串的字符计数,再遍历每个字符匹配最终计数生成对应符号,否则先出现的相同字符的输出会错误。
- 冗余外层循环:外层的
for循环完全多余,会导致内部逻辑重复执行N次(N等于字符串长度),不符合需求。 - 缺少大小写兼容处理:题目要求
Success这类大小写不同的相同字符视为重复,统计前需要统一转为小写/大写。
修复后完整代码
function duplicateEncode(word){ // 统一转为小写处理大小写兼容 const lowerWord = word.toLowerCase() // 初始化计数对象和结果数组 const count = {} const output = [] // 第一次遍历:统计所有字符出现次数 lowerWord.split('').forEach(str => { count[str] ? count[str]++ : count[str] = 1 }) // 第二次遍历:根据计数生成对应符号 lowerWord.split('').forEach(str => { count[str] === 1 ? output.push('(') : output.push(')') }) // 拼接为字符串返回 return output.join('') } // 测试用例 console.log(duplicateEncode("din")) // 输出 ((( console.log(duplicateEncode("recede")) // 输出 ()()() console.log(duplicateEncode("Success")) // 输出 )())()) console.log(duplicateEncode("(( @")) // 输出 ))((
内容的提问来源于stack exchange,提问作者Jonathan Joseph
相关产品推荐
相关产品推荐

