javascript - 无需在 JavaScript 中选择两次的随机数组选择

标签 javascript arrays random

因此,我试图从数组中选择一个随机条目,然后进行选择,以便在选择每个条目之前不会再次选择特定条目。 基本上,在选择数组中的所有条目之前,我不想看到任何相同的条目。

所以如果这是我的阵列......

keywords =
[
 "ppc",
 "games",
 "advertise",
 "meta",
 "home",
 "gaming",
 "welcome"
]
var keyword = keywords[Math.floor(Math.random()*keywords.length)]
document.write(keyword);

我不想看到输出:

meta, advertise, home, meta, gaming, welcome, ppc, welcome

因为在所有内容都被选中之前第二次选中了 meta。 我希望看到更多类似的内容:

meta, advertise, gaming,ppc, welcome, home, games, advertise, ppc,

因为这在随机选择每个条目之前没有多次选择任何条目。(第二个循环从第二个“广告”开始,以防您没有发现差异。

但是正如您从我上面发布的代码中看到的那样,我不知道该怎么做。我已经看到随机选择的条目实际上从数组中完全删除的示例,但这不是我想要做的。我只想选择每个条目一次,然后重新启动该过程。

有人知道这个的代码吗?

最佳答案

您可以使用 Array.sort() 函数对其进行随机排序。

// random sort function
function shuffle(a, b)
{
   return Math.random() > 0.5 ? -1 : 1;
}

var keywords = ["ppc", "games", "advertise", "meta", "home", "gaming", "welcome"];

var randomKeywords = keywords.sort(shuffle); // new instance of a sorted randomly copy of the array

alert(randomKeywords);

更新:

更好的洗牌解决方案是使用 Fisher-Yates Shuffle,如本 answer 中所见.

function shuffle(array)
{
  var m = array.length, t, i;
  while (m > 0) 
  {
	i = Math.floor(Math.random() * m--);
	t = array[m];
	array[m] = array[i];
	array[i] = t;
  }
  return array;
}

var keywords = ["ppc", "games", "advertise", "meta", "home", "gaming", "welcome"];

shuffle(keywords); // shuffles the array

alert(keywords);

关于javascript - 无需在 JavaScript 中选择两次的随机数组选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7133335/

相关文章:

javascript - 随机数生成器,我的方法/统计有什么问题? [JS]

javascript - 在一行中写一个嵌套的过滤器

javascript - 我无法用纯 JavaScript 获得元素的准确高度

javascript - 使用 jQuery 定位 iFrame 主体(同一域)

java - java中如何查找数组中一个数字重复了多少次

c++ - 创建指向结构的指针数组 - C++

javascript - 使用传单 API 更新标记位置

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

c - 为结构体成员生成随机数

javascript - 内置 jQuery 扩展,但不允许最大返回值