费雪耶茨洗牌1号显示

时间:2015-07-02 07:06:32

标签: javascript algorithm shuffle

我正在使用Fisher Yates Shuffle并通过小教程,我可以看到你可以随机化一个订单,如4,1,3,2,6,7,5等...但我想找到如何只显示1个数字。可以有一个提交按钮,当我按下提交时,会显示1到7之间的随机数。 然后将这个数字放在一边,所以当我再次点击提交时,我将有100%的机会再次看到这个数字。 所以基本上我可以按7次提交,第8次也不会发生任何事情。 这是我正在使用的Javascript:

    <script>
Array.prototype.shuffle = function(){
  var i = this.length, j, temp;
while(--i > 0) {
    j = Math.floor(Math.random() * (i+1));
    temp = this[j];
    this[j] = this[i];
    this[i] = temp;
    }
    return this;
}
var arr = ['A','B','C','D','E','F','G','H'];
var result = arr.shuffle();

document.write(result);
</script>

我用google搜索没有成功, 非常感谢。

2 个答案:

答案 0 :(得分:0)

以下是我使用过的实现方法。

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

你可以用以下方式调用:

fisherYates(arr,Math.min(nr_items, selectionSize));

请注意

 var tempi = myArray[i];
 var tempj = myArray[j];
 myArray[i] = tempj;
 myArray[j] = tempi;

是一个笨蛋版本:

 var temp = myArray[i];
 myArray[i] = myArray[j];
 myArray[j] = temp;

答案 1 :(得分:0)

你可以在数组中打印一个特定的位置,因为它每次都是随机的 - 不是吗?因此,您可以使用该位置创建变量,然后打印变量。 E.g。

var finalResult = arr[2]; //you can have any position you want
document.write(finalResult);

那应该适合你。