【问题标题】:Random numbers for array, but not the same | JavaScript数组的随机数,但不一样| JavaScript
【发布时间】:2016-08-30 18:50:06
【问题描述】:

我正在尝试创建一个数字数组。该数组应如下所示:

[1, 2, 1][2, 1, 2]

我不想再选择相同的号码。

所以我不想要[1, 1, 2][2, 2, 1]

我有以下代码:

var chosenHosts = [];

for (var i = 0; i < match.match_games; ++i) {
     var num = 1 + Math.floor(Math.random() * 2);

     chosenHosts.push(num);
}

console.log(chosenHosts);

此代码将相同的数字推送两次。有没有人知道如何实现上述目标?

附:抱歉,标题令人困惑,我不知道如何描述它。

【问题讨论】:

  • 你的代码中没有 jquery
  • @depperm 是的,很抱歉。我的意思是,使用 JQuery 也很好

标签: javascript arrays


【解决方案1】:

这样的事情会起作用

var chosenHosts = [1 + Math.floor(Math.random() * 2)];

for (var i = 1; i <  match.match_games; i++) {
     var num = chosenHosts[i - 1] == 1 ? 2 : 1; 
     chosenHosts.push(num);
}

console.log(chosenHosts);

【讨论】:

  • 这仅在随机数介于 1 或 2 之间时才有效
  • 真 - 就像 OP 要求 @depperm
  • @baao 这几乎就是我需要的!这会输出 4 个数字。我只需要 3 个。你知道如何实现吗?
  • 所以你的 match.match_games 总是包含 3 个条目? @克里斯
  • @baao 介于 1 或 3 之间
【解决方案2】:

您可以检查数组中的最后一个元素并继续创建一个随机数,直到它不同为止。

var chosenHosts = [1 + Math.floor(Math.random() * 2)];

for (var i = 0; i < match.match_games; i++) {
  var r = 1 + Math.floor(Math.random() * 2);
  while (chosenHosts[i] == r)
    r = 1 + Math.floor(Math.random() * 2);
  chosenHosts.push(r);
}

console.log(chosenHosts);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多