构思是:点击按钮,用数组的唯一字符串替换标题。这个问题是我之前使用了一个数组的字符串:
headlines = new Array("Good", "Bad", "Ugly", "Random Headline");
var randomNumberBefore = 4;
alert (headlines[randomNumberBefore]);
但我不想再次显示相同的标题,这是为什么密钥检查实际索引randomNumberBefore
与新索引randomNumber
不一样。以下功能对我有意义,但有时会返回相同的数字,导致标题被自身替换,用户注意到没有变化。
function randomNumberByRange (range, number) {
var r;
do {
var r = Math.floor(Math.random() * range);
} while (r == number);
return r;
}
$(document).on('click','.nextquote' , function() {
var randomNumber = randomNumberByRange( headlines.length, randomNumberBefore);
var nextHeadline = headlines[randomNumber];
$(".bannertext").text(nextHeadline);
console.log(nextHeadline);
});
每次点击都有独特标题的想法吗?
这是我的starting fiddle。
-
这是final fiddle。
答案 0 :(得分:2)
您忘记将旧值分配给randomNumberBefore; 之后
var randomNumber = randomNumberByRange( headlines.length, randomNumberBefore);
把
randomNumberBefore = randomNumber;
PS:有一种方法可以使randomNumberByRange函数更高效:
function randomNumberByRange (range, number) {
var r = Math.floor(Math.random() * (range-1));
if(r >= number)r++;
return r;
}
但是,如果您有很多标题,那么您的功能就足够了(因为碰撞概率随着您在列表中的项目数量而下降)
答案 1 :(得分:1)
如果您不想重复,只需从数组中删除已使用的元素。
var h = new Array("Good", "Bad", "Ugly", "Random Headline");
while (h.length > 0) {
var i = Math.floor(Math.random() * h.length);
var t = h.splice(i, 1);
console.log(t);
}