JavaScript类中实现字符频率统计方法报错求助:str.length标红
修复你的JavaScript类字符频率统计方法
嘿,我来帮你搞定这个字符频率统计的问题!你代码里的str.length报错,还有功能不符合预期,主要是几个类实例属性访问和初始化的问题,咱们一步步修复:
问题分析
- 未正确访问实例属性:在
frequency方法里,你直接用str和letters,但这些是类实例的属性,必须通过this.来访问(比如this.str、this.letters),否则JS会把它们当成未定义的全局变量,导致报错。 - 构造函数参数未生效:你的构造函数接收了
str参数,但直接把this.str硬编码成了"Hello World",传入的测试字符串根本没被用到;而且letters被初始化为空字符串,它应该是一个空对象才能存储字符-频率的键值对。 - 未过滤非目标字符:你的测试字符串里有
.,如果不需要统计符号,得跳过这类字符。
修改后的完整代码
class MyString{ constructor(str){ // 用传入的字符串初始化实例属性,默认值为空字符串避免异常 this.str = str || ""; // 初始化letters为空对象,用于存储字符频率 this.letters = {}; } frequency(){ // 遍历实例的str属性 for (var i = 0; i < this.str.length; i++){ const char = this.str.charAt(i); // 仅统计字母字符,不需要的话可以删除这行 if (!/[a-zA-Z]/.test(char)) continue; // 更新实例的letters对象中的频率 if(this.letters[char]){ this.letters[char]++; }else{ this.letters[char] = 1; } } return this.letters; } } // 创建实例并传入测试字符串 let txt1 = new MyString("uuuuii."); const frequencyResult = txt1.frequency(); // 按预期格式输出结果 for (const [char, count] of Object.entries(frequencyResult)) { console.log(`${char}: ${count}`); }
运行结果
执行后控制台会输出:
u: 4 i: 2
关键修改点说明
- 构造函数现在正确使用传入的
str参数初始化实例,同时给this.letters设置了正确的空对象类型。 frequency方法中所有访问实例属性的地方都加上了this.,确保指向当前实例的属性。- 新增了字母过滤逻辑,如果你需要统计所有字符(包括符号、数字),只需删除
if (!/[a-zA-Z]/.test(char)) continue;这一行即可。
内容的提问来源于stack exchange,提问作者lylyly
相关产品推荐
相关产品推荐

