确保随机分配的属性没有重复
Make sure that randomly assigned attribute is not duplicating
我有这个场景。页面上有六个不同位置的占位符。我有六个不同的词,每个词应该随机分配给一个占位符。
我想要实现的是没有重复的单词,例如占位符 nr.3 得到 "Word-1",占位符 nr.6 得到 "Word-1"。
这是我用来将单词随机分配给占位符的 JavaScript,在我的例子中是段落元素。
var word_1 = $('#main').append('<p class="word word-1"></p>'),
word_2 = $('#main').append('<p class="word word-2"></p>'),
word_3 = $('#main').append('<p class="word word-3"></p>'),
word_4 = $('#main').append('<p class="word word-4"></p>'),
word_5 = $('#main').append('<p class="word word-5"></p>'),
word_6 = $('#main').append('<p class="word word-6"></p>');
var pos_1 = $('.word-1').css({'left' : '0', 'right' : '0', 'top' : '48%'})
var pos_2 = $('.word-2').css({'left' : '-400px', 'right' : '0', 'top' : '58%'})
var pos_3 = $('.word-3').css({'left' : '0', 'right' : '-400px', 'top' : '36%'})
var pos_4 = $('.word-4').css({'left' : '0', 'right' : '-320px', 'top' : '61%'})
var pos_5 = $('.word-5').css({'left' : '-500px', 'right' : '0', 'top' : '36%'})
var pos_8 = $('.word-6').css({'left' : '-320px', 'right' : '0', 'top' : '46%'})
var words = ['word-1', 'word-2', 'word-3', 'word-4', 'word-5', 'word-6'];
$('.word').each(function(){
classIndex = Math.floor(Math.random() * words.length);
$(this).text(words[classIndex]);
})
这里有一个 fiddle 说明了我想要实现的目标。
http://jsfiddle.net/somkchza/
您需要的是打乱数组,然后将每个数组分配给单词。
按照你现在的做法,你会随机挑选一个词,你可能会得到同一个词两次。你不需要那个。
如果您打乱数组 - 每个单词只有一次,但打乱它以获得随机顺序。然后将每个分配给您的.word
点
我不是在修复这个问题,也不是为您编写随机播放算法,而是尝试类似的方法:
var words = ['word-1', 'word-2', 'word-3', 'word-4', 'word-5', 'word-6'];
# google how to shuffle an array and put that function somewhere
# eg https://css-tricks.com/snippets/javascript/shuffle-array/
words = Shuffle(words);
# they are already random - so now just assign each one to a place
$('.word').each(function(){
$(this).text(words[classIndex]);
})
只需在循环内添加:words.splice(classIndex,1);以删除使用的词:
$('.word').each(function(){
classIndex = Math.floor(Math.random() * words.length);
$(this).text(words[classIndex]);
words.splice(classIndex,1);
})
我有这个场景。页面上有六个不同位置的占位符。我有六个不同的词,每个词应该随机分配给一个占位符。
我想要实现的是没有重复的单词,例如占位符 nr.3 得到 "Word-1",占位符 nr.6 得到 "Word-1"。
这是我用来将单词随机分配给占位符的 JavaScript,在我的例子中是段落元素。
var word_1 = $('#main').append('<p class="word word-1"></p>'),
word_2 = $('#main').append('<p class="word word-2"></p>'),
word_3 = $('#main').append('<p class="word word-3"></p>'),
word_4 = $('#main').append('<p class="word word-4"></p>'),
word_5 = $('#main').append('<p class="word word-5"></p>'),
word_6 = $('#main').append('<p class="word word-6"></p>');
var pos_1 = $('.word-1').css({'left' : '0', 'right' : '0', 'top' : '48%'})
var pos_2 = $('.word-2').css({'left' : '-400px', 'right' : '0', 'top' : '58%'})
var pos_3 = $('.word-3').css({'left' : '0', 'right' : '-400px', 'top' : '36%'})
var pos_4 = $('.word-4').css({'left' : '0', 'right' : '-320px', 'top' : '61%'})
var pos_5 = $('.word-5').css({'left' : '-500px', 'right' : '0', 'top' : '36%'})
var pos_8 = $('.word-6').css({'left' : '-320px', 'right' : '0', 'top' : '46%'})
var words = ['word-1', 'word-2', 'word-3', 'word-4', 'word-5', 'word-6'];
$('.word').each(function(){
classIndex = Math.floor(Math.random() * words.length);
$(this).text(words[classIndex]);
})
这里有一个 fiddle 说明了我想要实现的目标。 http://jsfiddle.net/somkchza/
您需要的是打乱数组,然后将每个数组分配给单词。
按照你现在的做法,你会随机挑选一个词,你可能会得到同一个词两次。你不需要那个。
如果您打乱数组 - 每个单词只有一次,但打乱它以获得随机顺序。然后将每个分配给您的.word
点
我不是在修复这个问题,也不是为您编写随机播放算法,而是尝试类似的方法:
var words = ['word-1', 'word-2', 'word-3', 'word-4', 'word-5', 'word-6'];
# google how to shuffle an array and put that function somewhere
# eg https://css-tricks.com/snippets/javascript/shuffle-array/
words = Shuffle(words);
# they are already random - so now just assign each one to a place
$('.word').each(function(){
$(this).text(words[classIndex]);
})
只需在循环内添加:words.splice(classIndex,1);以删除使用的词:
$('.word').each(function(){
classIndex = Math.floor(Math.random() * words.length);
$(this).text(words[classIndex]);
words.splice(classIndex,1);
})