Случайный результат - PullRequest
       3

Случайный результат

0 голосов
/ 30 марта 2012

В школе мы заняты созданием приложения Spotify. В настоящее время я делаю приложение, в котором я получаю изображения от LastFM от текущего исполнителя, который сейчас играет. Мне показывают три случайных изображения. Сейчас я пытаюсь убедиться, что 3 случайных изображения не могут быть одинаковыми.

Это то, что у меня есть на данный момент:

var randno       = Math.floor ( Math.random() * artistImages.length );
var randno2      = Math.floor ( Math.random() * artistImages.length );
var randno3      = Math.floor ( Math.random() * artistImages.length );

Теперь я хочу убедиться, что они не одинаковы. Кто-нибудь может мне помочь, как это сделать?

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Вы можете создать массив индексов, перетасовать их с помощью перемешивания Fisher Yates и затем вырезать 3.

function fisherYates ( myArray ) {
  var i = myArray.length;
  if ( i == 0 ) return false;
  while ( --i ) {
     var j = Math.floor( Math.random() * ( i + 1 ) );
     var tempi = myArray[i];
     var tempj = myArray[j];
     myArray[i] = tempj;
     myArray[j] = tempi;
   }
}

var arr = new Array(artistImages.length + 1).map(function(val, index) { 
                                                    return index; 
                                                 });

var rands = fisherYates(arr).slice(0, 3);

Реализация Fisher Yates с здесь .

1 голос
/ 30 марта 2012

Используйте пока цикл :

var randno = Math.floor ( Math.random() * artistImages.length );    

var randno2 = Math.floor ( Math.random() * artistImages.length );
while (randno2==randno)
{
   randno2 = Math.floor ( Math.random() * artistImages.length );
}

var randno3 = Math.floor ( Math.random() * artistImages.length );
while (randno3==randno || randno3==randno2)
{
   randno3 = Math.floor ( Math.random() * artistImages.length );
}
...