仅使用一次数组元素

Sim*_*son 4 html javascript arrays random jquery

我是JavaScript新手,我想从我的数组中获取三个随机元素,这些元素需要不同.我已经设法得到三个不同的元素,然后我尝试通过split方法只获取一个元素.但显然这不起作用,可能有很多错误,因为这是我的第一个脚本之一.它有时也说"未定义".

http://jsfiddle.net/t4mtpm50/

HTML:

<span id="tot1"></span>, <span id="tot2"> und </span> und <span id="tot3"></span>
Run Code Online (Sandbox Code Playgroud)

使用Javascript:

function getNumber() {
    random = Math.floor(Math.random() * students.length);
    students.splice(random,1);
    return random;
}

students = new Array("Paul", "Jan", "Fabian D.", "Fabian K.", "Lennard", 
                            "Robin", "Angelique", "Joyce", "Sarah", "Ajlin",
                            "Enes", "Leon", "Boran", "Joshua")    

getNumber();
tot1 = students[random];
getNumber();
tot2 = students[random];
getNumber();
tot3 = students[random];

document.getElementById('tot1').innerHTML = tot1;
document.getElementById('tot2').innerHTML = tot2;
document.getElementById('tot3').innerHTML = tot3;
Run Code Online (Sandbox Code Playgroud)

Jon*_*ski 7

通过使用.splice(),随机选择的名称实际上在被检索之前被删除,random而是引用集合中的下一个名称:

var students = [ "Paul", "Jan", "Fabian D." ];
var random = 1;

console.log(students[random]); // "Jan"

students.splice(random, 1);

console.log(students);         // [ "Paul", "Fabian D." ]
console.log(students[random]); // "Fabian D."
Run Code Online (Sandbox Code Playgroud)

当它random试图引用最后一个元素时,会发生"它有时会说'未定义'" :

var students = [ "Paul", "Jan", "Fabian D." ];
var random = 2;

console.log(students[random]); // "Fabian D."

students.splice(random, 1);

console.log(students);         // [ "Paul", "Jan" ]
console.log(students[random]); // undefined, random is now out-of-bounds at 2
Run Code Online (Sandbox Code Playgroud)

您可以使用返回值.splice(),它是已删除元素的集合,重新定义getNumber()为返回元素而不是索引:

function getStudent() {
    var random = Math.floor(Math.random() * students.length);
    return students.splice(random, 1)[0]; // return the 1st and only removed element
}

var tot1 = getStudent(); // "Fabian D."
var tot2 = getStudent(); // "Enes"
var tot3 = getStudent(); // "Joyce"
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/6gox6L1t/


low*_*nts 5

我认为这将是一个更好,更清洁,更短的解决方案:

function getStudent(students) {
    var random = Math.floor(Math.random() * (students.length));
    var my_student = students.splice(random,1);
    return my_student;
}

var students = new Array("Paul", "Jan", "Fabian D.", "Fabian K.", "Lennard", 
                            "Robin", "Angelique", "Joyce", "Sarah", "Ajlin",
                         "Enes", "Leon", "Boran", "Joshua");


document.getElementById('tot1').innerHTML = getStudent(students);
document.getElementById('tot2').innerHTML = getStudent(students);
document.getElementById('tot3').innerHTML = getStudent(students);
Run Code Online (Sandbox Code Playgroud)


您将当前学生数组传递给getStudent()函数,以避免在脚本中使用全局变量. splice返回删除的元素,因此您在那里获得了学生姓名并将其返回.

edit2:我错-1.length.1是一个独家的结果Math.random(),所以你是对的.

http://jsfiddle.net/northkildonan/38rf42f7/1/

编辑:此方法完全避免在脚本中使用全局变量.