实现单词转手机数字键盘序列返回undefined,如何排查代码错误?
代码错误点分析
- 大小写不匹配导致下标越界
你定义的str数组下标对应大写字母A-Z的映射,计算位置时用的是输入字符的ASCII码减去大写A的ASCII码,而输入的test为小写字母,小写字母的ASCII码比大写字母大32,计算得到的position值远超出str数组的长度,读取arr[position]就会返回undefined,最终拼接结果就是多个undefined拼接。 - 空格处理逻辑错误
空格分支的代码写的是拼接"0".charCodeAt(0),该值是字符0对应的ASCII码48,而非你需要的字符"0"。
修复方案
修改printSequence函数即可:
- 读取字符后先转为大写,再计算position
- 空格分支直接拼接字符
"0"
const printSequence = (arr, input) => { let output = ""; let n = input.length; // 统一转大写后再处理 const upperInput = input.toUpperCase(); for (let i = 0; i < n; i++) { if (upperInput[i] == " ") { // 直接拼接字符0 output = output + "0"; } else { let position = upperInput[i].charCodeAt(0) - "A".charCodeAt(0); output = output + arr[position]; } } setOutput(output); };
内容的提问来源于stack exchange,提问作者kozdro
相关产品推荐
相关产品推荐

