javascript唯一值数组中的唯一随机值

Unique random values from array of unique values javascript

本文关键字:唯一 随机 数组 javascript      更新时间:2023-12-28

我有十二个正方形,其中六个是随机选择的,然后应用一种样式。这是通过从唯一值的数组中生成随机值来实现的。问题是生成的随机值不是唯一的,例如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);
   };

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

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);

然后重复。

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

  • 随机选择一个项目,如果以前使用过,请重复
  • 将所有项目放入一个数组中,随机选取并从数组中移除
  • 将所有项目放在一个数组中并洗牌

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

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

否则,只需选择一个看起来最容易实现的。对于任何正常应用程序来说,都足够好。