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
相关产品推荐
相关产品推荐

