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

JavaScript新手技术咨询:修改PodcastEpisode类的getEpisodeInfo方法以返回通用格式的剧集时长

修改PodcastEpisode的剧集时长为通用标准格式

嘿,我懂你想要让剧集时长显示更贴合通用规范的需求——比如时长超过一小时时,能自动输出「时:分:秒」的格式,而不是只显示「分:秒」对吧?咱们来一步步调整代码,搞定这个问题:

修改后的完整代码

class PodcastEpisode { 
  constructor(title, artist, guest, duration){ 
    this.title = title; 
    this.artist = artist; 
    this.guest = guest; 
    this.duration = duration; 
    this.isLiked = false; // 给点赞状态加初始值,避免undefined
  } 

  like(){ 
    this.isLiked = !this.isLiked; // 修复原方法的bug,实现点赞/取消点赞的切换
  } 

  getFormattedDuration() { 
    const hours = Math.floor(this.duration / 3600);
    const remainingSeconds = this.duration % 3600;
    const minutes = Math.floor(remainingSeconds / 60); 
    const seconds = remainingSeconds % 60; 

    // 根据时长自动适配格式
    if (hours > 0) {
      return `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
    } else {
      return `${minutes}:${seconds.toString().padStart(2, '0')}`;
    }
  } 

  getEpisodeInfo(){ 
    // 优化信息排版,让内容更易读
    return `${this.artist} - "${this.title}" (嘉宾: ${this.guest}) | 时长: ${this.getFormattedDuration()}`; 
  } 
}

关键修改说明

  • 适配多时长场景的格式化逻辑:新增小时计算逻辑,当时长超过1小时(3600秒)时自动输出「时:分:秒」,否则保持「分:秒」;用padStart(2, '0')确保分钟、秒数始终是两位数(比如5秒会显示为05),比原代码的三元运算符更简洁通用。
  • 修复点赞方法的bug:原like()方法不会改变状态,改成取反操作后才能实现正常的点赞/取消点赞功能。
  • 优化信息展示结构:调整getEpisodeInfo()的字符串拼接格式,用括号标注嘉宾、竖线分隔时长,让播客信息的排版更符合常见的展示习惯。

测试示例

// 测试短时长(不足1小时)
const shortEpisode = new PodcastEpisode("前端入门指南", "技术咖", "小A", 1250); // 20分50秒
console.log(shortEpisode.getEpisodeInfo()); 
// 输出:技术咖 - "前端入门指南" (嘉宾: 小A) | 时长: 20:50

// 测试长时长(超过1小时)
const longEpisode = new PodcastEpisode("深入JS异步", "技术咖", "老B", 3720); // 1小时2分
console.log(longEpisode.getEpisodeInfo()); 
// 输出:技术咖 - "深入JS异步" (嘉宾: 老B) | 时长: 1:02:00

这样修改后,不管是短时长还是长时长的剧集,都能输出符合通用标准的格式啦!

内容的提问来源于stack exchange,提问作者Rox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:42:29