【问题标题】:Unique random values from array of unique values javascript来自唯一值数组的唯一随机值javascript
【发布时间】:2013-11-29 20:10:11
【问题描述】:

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

【问题讨论】:

  • 您说您找到了解决方案,那么您尝试了什么呢?我在您的代码中没有看到任何尝试
  • 你能把“square”元素改成新属性吗?
  • 我没有说我已经找到了解决方案 - 我说我已经阅读了一些关于这个主题的 SO 帖子,并就什么方法是最有效的方法征求意见有效。
  • 挑一个试试看……没有most effectiveeasiest to insert

标签: javascript arrays random


【解决方案1】:

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

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

然后重复。

【讨论】:

  • 谢谢@BrunoLM - 很高兴知道这里有一些乐于助人的人。
【解决方案2】:

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

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

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

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

否则,只需选择似乎最容易实现的那个。对于任何正常的应用程序来说,这些都足够好。

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2022-11-24
    • 1970-01-01
    相关资源
    最近更新 更多