【问题标题】:How to get random elements from an array [duplicate]如何从数组中获取随机元素[重复]
【发布时间】:2011-11-01 18:52:23
【问题描述】:

可能重复:
JavaScript: Getting random value from an array

var numbers = new Array('1','2','4','5','6','7','8','9','10');

我有一个 JavaScript 数组,现在想从中随机选择四个不同的数字,然后在页面上表达它(通过document.write)。显然,每次用户重新加载页面时,它都会显示四个不同的随机数。

【问题讨论】:

  • OT:最好使用数组字面量:var numbers = ['1', ...];
  • 实际上,这与假设的重复不是同一个问题:从数组中获取多个不同的、适当的随机值比仅获取一个随机值要复杂得多。
  • @TimDown:同意。如果这与假设的重复问题相同,则答案将相同(相同的问题有相同的答案对吗?)显然不是。
  • 以下是更接近的副本:stackoverflow.com/questions/11935175/…

标签: javascript


【解决方案1】:

您可以随机排列数组并选择前四个。

numbers.sort( function() { return 0.5 - Math.random() } );

现在numbers[0]numbers[1]...等等都有随机且独特的元素。

请注意,此方法可能不是洗牌数组的最佳方法:请参阅Is it correct to use JavaScript Array.sort() method for shuffling? 进行讨论。

【讨论】:

  • 不错的一个!很好地考虑了独特的元素。
  • 在这种情况下这无关紧要,但我仍然觉得它很有趣;这种方法毕竟不是随机的:sitepoint.com/…
  • @Matt 好点,我会编辑答案。
  • 这也会改变原始数组,这可能是不可取的。
  • number.filter(() => Math.round(Math.random()) 获取随机项目并在需要时继续排序。
【解决方案2】:

如果您希望它像 JavaScript 的 Math.random() 的本机实现所允许的那样随机,您可以使用类似以下的内容,它还具有保持原始数组不变并且仅随机化尽可能多的数组的优点根据需要:

function getRandomArrayElements(arr, count) {
    var shuffled = arr.slice(0), i = arr.length, min = i - count, temp, index;
    while (i-- > min) {
        index = Math.floor((i + 1) * Math.random());
        temp = shuffled[index];
        shuffled[index] = shuffled[i];
        shuffled[i] = temp;
    }
    return shuffled.slice(min);
}


var numbers = ['1','2','4','5','6','7','8','9','10'];
alert( getRandomArrayElements(numbers, 4) );

【讨论】:

  • 迄今为止我遇到的最佳答案(至少满足我的需要),谢谢
  • 其实随机的,谢谢!
【解决方案3】:
//return a random integer between 0 and 10

document.write(Math.floor(Math.random()*11));

【讨论】:

  • 我假设“四个不同的数字”意味着这些数字必须是唯一的。
  • 我没有像它说的那样每次加载页面时它应该是随机的。
  • @Nim 可能是两种方式,但我解释了这部分,以便每次页面加载都应该提取不同(但唯一)的随机数,而不是上次显示的相同。
【解决方案4】:
var numbers = new Array('1','2','4','5','6','7','8','9','10');
document.write(numbers[Math.floor(Math.random()*numbers.length)]);

【讨论】:

    猜你喜欢
    • 2023-01-28
    • 1970-01-01
    • 2018-10-23
    • 2022-01-25
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多