琐碎的问题。到目前为止我所拥有的http://jsfiddle.net/Dth2y/1/
任务,下一个按钮应该从数组中随机选择一个值并从数组中删除该值。到目前为止,这称为getNames函数,在此函数中,从数组中随机选择的值也应该在被附加到html后删除。
HTML
<h1 id="name">Click Next To Start</h1> <button id="next">NEXT NAME</button> <button>SKIP NAME</button>
JS
$(document).ready(function() {
var names = [
"Paul",
"Louise",
"Adam",
"Lewis",
"Rachel"
];
function getNames() {
return names[Math.floor(Math.random() * names.length)];
}
$("#next").click(function() {
$('#name').text(getNames())
});
});
我已经看到使用拼接方法的类似问题,我试图破解一个版本,但我想知道是否有更有效的方法。
答案 0 :(得分:2)
您需要查看此内容:http://ejohn.org/blog/javascript-array-remove/
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
这里适用于你的小提琴: http://jsfiddle.net/Dth2y/3/
答案 1 :(得分:0)
您可以事先随机地随机播放数组,然后pop()
第一个元素或shift()
最后一个元素。
/**
* Shuffles an array in-place
*/
function shuffle(array) {
for (var i = array.length-1; i > 0; --i) {
// Select a random index 0 <= j <= i
var j = Math.floor(Math.random() * (i+1));
// Swap elements at i and j
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
$(document).ready(function() {
var names = [
"Paul",
"Louise",
"Adam",
"Lewis",
"Rachel"
];
// Shuffle the names
shuffle(names);
$("#next").click(function() {
// Grab the next name and remove it
$('#name').text(names.pop());
});
});
(shuffle
函数基于the Fisher-Yates shuffle algoritm。This post解释了它的工作原理。)