来自唯一值javascript数组的唯一随机值

时间:2013-11-29 20:10:12

标签: javascript arrays random

我有十二个正方形,随机选择六个正方形,然后应用一种风格。这是通过从唯一值数组生成随机值来实现的。问题是生成的随机值不是唯一的,例如可以多次选择5。我在这里看了很多帖子,似乎有很多不同的方法来实现这一点 - 改组等哪个会最有效?

   for (var i = 0; i < 6 ; i++)
    (function (i) {
      setTimeout(function () {
        var rand = arr[Math.floor(Math.random() * arr.length)];
        var square = document.getElementById('square' + rand);
        square.style.background = black;
    if (i == 6) Reset();
   }, 1500 * i);
   })(i);
   };

2 个答案:

答案 0 :(得分:2)

为了简单起见,我假设你的元素有一个类。

Example on jsFiddle

所以,我会抓住所有元素:

var elements = document.getElementsByClassName("square");

然后我会创建一个ID为

的数组
var ids = [];

for (var i = 0; i < elements.length; ++i)
{
    ids.push(elements[i].getAttribute("id"));
}

然后在数组的长度上生成随机数

var random = roundingFunction(Math.random() * ids.length);

然后检索索引处的元素并从数组中删除

var elementID = ids.splice(random, 1);

重复一遍。

答案 1 :(得分:0)

基本上有三种不同的方法:

  • 随机选择一个项目,如果之前使用过则重复。
  • 将所有项目放入数组中,随机选择并从数组中删除。
  • 将所有项目放入数组并随机播放。

哪一个效率最高的问题无法在您的问题范围内得到解答。它们之间的差异非常小,考虑到浏览器之间的性能差异,它可以忽略不计。

如果你真的需要最高效的,你必须全部尝试并在各种浏览器中测试性能。

否则只需选择最容易实现的那个。这些都足以满足任何正常应用。