从数组中随机选择3个元素,且不重复选择相同的元素。

3
我正在尝试编写一个函数,使其打印出三个不重复的随机名字。我开始在for循环内部尝试使用if语句,但不确定这样是否正确。非常感谢所有帮助,因为我在学习Javascript时感到有些困惑。
var name = ["Kai", "Lars", "Anders", "Ole", "Petter", "Mikael", "Cos", "Sin"];  
var randName = [];

    function randomNavn(){
        document.getElementById("utskrift").innerHTML = "";
        for( i = 0; i < 3; i++){
            randName.push(name.splice(Math.floor(Math.random() * name.length), 1));

            if(name[i] === randName[i]){

            }
        }
        document.getElementById("utskrift").innerHTML = randName.join(" , ");
    }

这个问题是“这是否正确”吗?尝试一下,如果不行的话,请发布一个带有您问题的问题。 - Tim Wilkinson
3个回答

3
你可以使用 do..while 循环。注意在 .splice() 结尾处添加 [0],以返回数组的值而不是整个数组。

var names = ["Kai", "Lars", "Anders", "Ole"
             , "Petter", "Mikael", "Cos", "Sin"];  
var randName = [];
do {
  randName[randName.length] = names.splice(
                                Math.floor(Math.random() * names.length)
                              , 1)[0];
} while (randName.length < 3);

console.log(randName);


0

我建议使用一个不同的变量名,而不是name,因为它是window对象的受保护属性。

function randomNavn(){
    document.getElementById("utskrift").innerHTML = "";
    for (i = 0; i < 3; i++){
        randName.push(nname.splice(Math.floor(Math.random() * nname.length), 1));
    }
    document.getElementById("utskrift").innerHTML = randName.join(", ");
}

var nname = ["Kai", "Lars", "Anders", "Ole", "Petter", "Mikael", "Cos", "Sin"],
    randName = [];

randomNavn();
<div id="utskrift"></div>


0

对于您来说,那将是

var name = ["Kai", "Lars", "Anders", "Ole", "Petter", "Mikael", "Cos", "Sin"];  
var randName = [];
function randomNavn(){
    document.getElementById("utskrift").innerHTML = "";
    for( i = 0; i < 3; i++){
        randName.push(name.splice(Math.floor(Math.random() * name.length), 1));
        if(name[i] === randName[i]){
            i-- // yay, that's all!
        }
    }
    document.getElementById("utskrift").innerHTML = randName.join(" , ");
}

另一种方法:

var i1 = Math.floor(Math.random() * name.length);
var i2 = Math.floor(Math.random() * (name.length-1));
if (i2 >= i1) i2++;
var i2 = Math.floor(Math.random() * (name.length-2));
if (i3 >= i2) i3++;
if (i3 >= i1) i3++;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接