【问题标题】:Randomly select multiple items from an array [duplicate]从数组中随机选择多个项目[重复]
【发布时间】:2016-01-12 10:37:03
【问题描述】:

我想要一个包含不同单词和短语的数组,并在页面刷新时随机生成其中的五个。我将如何在 javascript 中执行此操作?

【问题讨论】:

  • 你卡在哪里了?你不知道如何从 0-n 生成一个随机数吗?你知道如何循环获得其中的五个吗?有了随机索引后,你不知道如何从数组中获取元素吗?

标签: javascript arrays string random


【解决方案1】:

循环运行。
每次从原始数组中删除 1 个对象并将其放入新数组中
如果你想保留你原来的数组,你可以复制一份。

var myArray = [];
var myNewArray = [];
for (var i=0; i<5; i++) {
    myNewArray.push(myArray.splice(Math.random()*(myArray.length-1),1).pop());
}

您还可以创建一个包含 5 个介于 0 和 myArray.length-1 之间的随机数的数组。然后你必须在每次随机数生成后检查生成的数字是否已经在数组中。

var indexArr = [];
while (indexArr.length < 5) {
    var rndIndex = Math.random()*(myArray.length-1);
    if (indexArr.indexOf(rndIndex) == -1) // if rndIndex is not in indexArr
        indexArr.push(rndIndex);
}

然后您可以使用 indexArray 从原始数组中返回 5 个随机元素。

【讨论】:

    【解决方案2】:

    您可以使用数组长度并运行 for 循环来使用 Math.random() 执行此操作:

    var randomNums = [];
    for(var i=0; i<5; i++){
        int x = myArray[Math.random()*(myArray.length-1)];
        if(!randomNums.contains(x)){
            randomNums.push(x);
        }
    }
    

    randomNums 应该是一个数组,其中包含来自其他数组的五个随机值

    【讨论】:

    • 这可能会导致重复。
    • @torazaburo 检查更新的答案
    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    相关资源
    最近更新 更多