Build library - shuffle method

Hey guys, I feel so proud of myself to have produce this, google and the forum helped me a lot but I could not find a correct solution to this “Shuffled method”

I was not satisfy by the fact that 100% of the code I found were returning an array.length = this.songs.length with songs that can be found multiple times in the returned array.

So I produce this method that does not allow a song to repeat in the returned array…

Enjoy
J J Cale Loves you!!

shuffle() { let shuffledArray=[]; while(shuffledArray.length<this.songs.length) { let randomNumber = [Math.floor(Math.random()*this.songs.length)]; if(!shuffledArray.includes(this.songs[randomNumber])){shuffledArray.push(this.songs[randomNumber]);} } return shuffledArray; }
4 Likes

Nice!, very clean solution, I solved it differently (took me a while):

shuffle(){
    const usedIndexes = [];
    const suffledArr = [];
    //1) Iterate over the array of elements (songs)
    for(let i=0; i<this.songs.length; i++){
      //2) In each iteration generate a randomindex
      let randomIndex = Math.floor(Math.random() * this.songs.length);
      //3) Store the randomIndex in an array (usedIndexes), making sure you haven't added it yet, if you have, try again
      if(!usedIndexes.some(elem=>elem===randomIndex)){
        usedIndexes.push(randomIndex);
        //4) Get the element of the original array that is in the randomIndex position and push it to a new array (shuffledArr)
        suffledArr.push(this.songs[randomIndex]);
      } else {
        //5) If the array already has the element, decrease iterator to retry
        i--;
      }
    }
    return suffledArr;
  }
1 Like