JavaScript编写按键次数统计时访问对象属性返回NaN如何解决
问题原因
- 对象属性访问方式错误:你使用
whigt.el的点语法访问属性时,JavaScript会直接查找whigt对象上名为el的固定属性,不会把el当做变量解析为当前遍历的字符,你的whigt对象不存在el属性,所以返回undefined,后续运算就会得到NaN。 - 现有逻辑只有遍历打印,没有实现按键次数累加、返回最终结果的功能。
修正后完整代码
let whigt = { A: 1, B: 2, C: 3, D: 1, E: 2, F: 3, G: 1, H: 2, I: 3, J: 1, K: 2, L: 3, M: 1, N: 2, O: 3, P: 1, Q: 2, R: 3, S: 4, T: 1, U: 2, V: 3, W: 1, X: 2, Y: 3, Z: 4, // 如果需要支持输入空格,添加这一行即可 // ' ': 1 } function presses(phrase) { // 转大写后拆分为单个字符,用reduce累加所有字符的按键次数 return phrase.toUpperCase().split('').reduce((total, char) => { return total + whigt[char] }, 0) } console.log(presses("omar")) // 输出结果为:1(O)+1(M)+1(A)+3(R)= 6
改动说明
- 把点语法
whigt.el替换为方括号语法whigt[char],方括号内可以传入变量,动态匹配对应键的数值。 - 用
reduce方法替代map遍历,直接在遍历过程中累加总按键次数,省去额外声明全局计数变量的步骤。 - 函数直接返回统计结果,调用后可直接获取总按键次数。
内容的提问来源于stack exchange,提问作者user15815618
相关产品推荐
相关产品推荐

