首页 > 解决方案 > 无法让类方法循环工作

问题描述

我是 JS(或一般编码)的新手,我正在尝试学习一些东西。我在循环中玩弄类方法,除了搞砸并希望能学到一两件事,但我无法得到想要的结果。

这是代码:

class CD extends Media {
  constructor(title, artist) {
    super(title);
    this._artist = artist;
    this._songTitles = [];
  }
  get songTitles() {
    return this._songTitles;
  }
  addSong(song) {
    if (typeof song === 'string') {
      this._songTitles.push(song)
    } else {
      console.log('You need to input the song title as a string.');
    }
  }
  shuffle() {
  const songList = this.songTitles;
  const randomIndex = Math.floor(Math.random() * songList.length);
  return songList[randomIndex];
  }
};

const flowerBoy = new CD('Flower Boy', 'Tyler, The Creator');
flowerBoy.addSong('Foreword (feat. Rex Orange County)');
flowerBoy.addSong('Where This Flower Blooms (feat. Frank Ocean)');
flowerBoy.addSong('Sometimes...');
flowerBoy.addSong('See You Again (feat. Kali Uchis)');

const songs = flowerBoy.songTitles;
while (flowerBoy.shuffle() != 'Sometimes...') {
  const randomIndex = Math.floor(Math.random() * songs.length);
  console.log(flowerBoy.songTitles[randomIndex]);
};

我想要实现的是一个循环,它将继续在flowerBoy.songTitles数组中随机播放,直到遇到 string 'Sometimes...'。我想我已经设法实现了循环部分,因为你的输出总是显示不同数量的歌曲,但是循环不会停止'Sometimes...',有时会停止在不同的歌曲上。

任何帮助将不胜感激,谢谢!

标签: javascript

解决方案


class CD extends Media {
  constructor(title, artist) {
    super(title);
    this._artist = artist;
    this._songTitles = [];
  }
  get songTitles() {
    return this._songTitles;
  }
  addSong(song) {
    if (typeof song === 'string') {
      this._songTitles.push(song)
    } else {
      console.log('You need to input the song title as a string.');
    }
  }
  shuffle() {
    const songList = this.songTitles;
    const randomIndex = Math.floor(Math.random() * songList.length);

    return songList[randomIndex];
  }
};

const flowerBoy = new CD('Flower Boy', 'Tyler, The Creator');

flowerBoy.addSong('Foreword (feat. Rex Orange County)');
flowerBoy.addSong('Where This Flower Blooms (feat. Frank Ocean)');
flowerBoy.addSong('Sometimes...');
flowerBoy.addSong('See You Again (feat. Kali Uchis)');

const songs = flowerBoy.songTitles;

const shuffleFlowerBoy = () => {
  const song = flowerBoy.shuffle();
  console.log(song);
  if (song !== 'Sometimes...') {
    return shuffleFlowerBoy();
  }
  
  return song;
}

shuffleFlowerBoy();

推荐阅读