Javascript从数组中获取随机变量,但每个变量只获取一次

Javascript从数组中获取随机变量,但每个变量只获取一次,javascript,jquery,arrays,random,Javascript,Jquery,Arrays,Random,我想从javascript中获取随机变量,并将其预先添加到div容器中,如下所示: // my Array var thumbnailArray = new Array(); thumbnailArray[0] = 'contentarray1'; thumbnailArray[1] = 'contentarray2'; thumbnailArray[2] = 'contentarray3'; function thumbnailquery () { for (var i = 0; i &l

我想从javascript中获取随机变量,并将其预先添加到div容器中,如下所示:

// my Array
var thumbnailArray = new Array();
thumbnailArray[0] = 'contentarray1';
thumbnailArray[1] = 'contentarray2';
thumbnailArray[2] = 'contentarray3';


function thumbnailquery () {
for (var i = 0; i <= 3; i++) {
$('#myDiv').prepend(thumbnailArray[Math.floor(Math.random() * thumbnailArray.length)])
}
}
现在,我如何确保每个变量只取一次,但仍然是随机的


谢谢

复制阵列。然后删除从复制的数组中获取的对象。

复制数组。然后删除从复制的数组中获取的对象。

没有优雅的方法可以按照您描述的方式执行。您可以构造一个选定索引的数组,并确保该数组中不存在每个随机数,但最坏情况下的操作时间为无穷大,因此强烈不建议这样做

你最好的办法是洗牌数组,然后迭代,按洗牌顺序选择元素

查看此堆栈溢出,了解在JavaScript中洗牌数组的好方法

没有优雅的方式可以按照你描述的方式来做。您可以构造一个选定索引的数组,并确保该数组中不存在每个随机数,但最坏情况下的操作时间为无穷大,因此强烈不建议这样做

你最好的办法是洗牌数组,然后迭代,按洗牌顺序选择元素

查看此堆栈溢出,了解在JavaScript中洗牌数组的好方法

将数组洗牌并弹出值

function shuffle(a) {
  var c=a.length,t,r;
  while (0 !== c) {
    r = Math.floor(Math.random() * c);
    c -= 1;t = a[c];a[c] = a[r];a[r] = t;
  }
  return a;
}

var thumbnailArray = [
    'contentarray1',
    'contentarray2',
    'contentarray3'
];

shuffle( thumbnailArray );
thumbnailquery();

function thumbnailquery () {
    for (var i = 0; i <= 3; i++) {
       $('#myDiv').prepend( thumbnailArray.pop() );
    }
}

改为洗牌数组并弹出值

function shuffle(a) {
  var c=a.length,t,r;
  while (0 !== c) {
    r = Math.floor(Math.random() * c);
    c -= 1;t = a[c];a[c] = a[r];a[r] = t;
  }
  return a;
}

var thumbnailArray = [
    'contentarray1',
    'contentarray2',
    'contentarray3'
];

shuffle( thumbnailArray );
thumbnailquery();

function thumbnailquery () {
    for (var i = 0; i <= 3; i++) {
       $('#myDiv').prepend( thumbnailArray.pop() );
    }
}
使用拼接

使用拼接


是否必须将元素保留在数组中?如果没有,您可以在选择该元素后将其从数组中删除。嗯,如果该元素保留在数组中会更好您必须将该元素保留在数组中吗?如果没有,您可以在选择它之后将其从数组中删除。嗯,如果它留在数组中作为参考会更好