从for循环中的数组中获取随机值(角度2)

时间:2017-04-16 04:03:53

标签: javascript arrays angular typescript ionic2

我正在创建一个音板,当单击按钮时,它会播放随机声音。我试图通过在for循环中创建一个数组来获取所有mp3文件链接(文件名),当用户单击按钮时,文件名是使用(Math.floor(Math.random))更改。

我遇到的问题是它只播放相同的声音。它不会播放随机声音。

soundboard.ts

    /* Loop through them, saving their title and sound file */
          for(let link of links) {
            let filename = link.getAttribute("href")            
            let rand = [filename];
            this.sounds.push({
              file: filename,
              rand: rand
            });
          }

    /* Plays the sound */
         play(sound) {     
           sound.rand = sound.file[Math.floor(Math.random() * sound.file.length)];
           console.log(sound.rand)   
           this.media = new Audio(sound.rand);
           this.media.load();
           this.media.play();
         }

2 个答案:

答案 0 :(得分:2)

似乎存在逻辑错误。根据您的问题描述,我认为您需要类似

的内容
export class Component {
  soundFileNames: string[] = [];

  media?: Audio;

  ngOnInit() {
    for (const link of links) {
      const fileName = link.getAttribute("href");
      soundFileNames.push(fileName);    
    }
  }

  playRandomSoundFile() {
    const randomIndex = Math.floor(Math.random() * soundFileNames.length);
    const randomFileName = soundFileNames[randomIndex];
    console.log(randomFileName);
    const audio = new Audio(randomFileName);
    audio.load();
    audio.play();
    this.media = audio;
  }
}

答案 1 :(得分:-1)

我觉得使用" underscorejs"总是更好。这些常见功能的库。在你的情况下,你试图从数组中获取随机值,你可以实现如下所示" underscorejs"。

view.setVisibility(View.VISIBLE;