You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript类中实现字符频率统计方法报错求助:str.length标红

修复你的JavaScript类字符频率统计方法

嘿,我来帮你搞定这个字符频率统计的问题!你代码里的str.length报错,还有功能不符合预期,主要是几个类实例属性访问和初始化的问题,咱们一步步修复:

问题分析

  1. 未正确访问实例属性:在frequency方法里,你直接用str和letters,但这些是类实例的属性,必须通过this.来访问(比如this.str、this.letters),否则JS会把它们当成未定义的全局变量,导致报错。
  2. 构造函数参数未生效:你的构造函数接收了str参数,但直接把this.str硬编码成了"Hello World",传入的测试字符串根本没被用到;而且letters被初始化为空字符串,它应该是一个空对象才能存储字符-频率的键值对。
  3. 未过滤非目标字符:你的测试字符串里有.,如果不需要统计符号,得跳过这类字符。

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:27:20