Jquery数组中的随机单词而不重复

时间:2014-10-03 13:21:56

标签: jquery random append

我需要在div中显示随机单词而不重复单词。

实施例: b 一个 C d

加: b 一个 b C d d 一个 一个 ç

$(document).ready(function($) { 
words = ['a','b','c','d'];
function doSomething() {}
(function loop() {
    var rand = Math.round(Math.random() * (3000 - 500)) + 500;
    setTimeout(function() {
            var thisWord = words[Math.floor(Math.random() * words.length)];
            $("#container").append("<div class=\"conversation\">"+thisWord+"<div class=\"conversation\">");
            doSomething();
            loop();  
    }, rand);
}());
});

4 个答案:

答案 0 :(得分:1)

您可以使用words.splice()删除显示的字母,如果words中没有任何内容,则停止显示字母。

jQuery(document).ready(function($) {
  words = ['a','b','c','d'];
  $(function() {
    rand = setInterval(function() {
      var thisWord = words[Math.floor(Math.random() * words.length)];
      $("#container").append(thisWord);
      // Remove the displayed letter from words
      words.splice(words.indexOf(thisWord), 1);
      // If there is nothing left in words, clear the interval.
      if (words.length == 0) {
        clearInterval(rand);
      }
    },800);
  });
});

Fiddle

上的演示

答案 1 :(得分:0)

您可以使用$.extend创建words数组的副本,然后您可以.splice删除您添加的每个元素。然后,当数组为空时,您可以清除间隔:

jQuery(document).ready(function($) {
    var words = ['a','b','c','d'];

    $(function() {
        //Create Copy
        var wordsSpliced = $.extend(true, [], words);

        //Save Interval Variable
        var intervalAddWords = setInterval(function() {
            //Clear Interval if all words shown
            if (wordsSpliced.length == 0) clearInterval(intervalAddWords);

            //Remove random word from wordsSpliced
            var thisWord = wordsSpliced.splice(Math.floor(Math.random() * wordsSpliced.length), 1);
            $("#container").append(thisWord);
        },800);
    });
});

在这里小提琴:http://jsfiddle.net/05bbjtgc/1/

答案 2 :(得分:0)

所以,我想知道为什么这段代码不适合你的目的? (还想知道完全相同的概念如何在以后发布并更多地投票,但那是另一个故事。)

$(document).ready(function($) {
words = ['a','b','c','d'];
var used = new Array();
var int = null;
$(function() {
  int = setInterval(function() {
        var r = Math.floor(Math.random() * words.length);
    var thisWord = words[r];
        words.splice(r,1);
    $("#container").append(thisWord);
        if(words.length == 0) {clearInterval(int);$("#container").append(' DONE');}
  },800);
});
});

答案 3 :(得分:0)

这是我的最新代码:

$(document).ready(function($) { 
words = ['a','b','c','d'];
function doSomething() {}
(function loop() {
    var rand = Math.round(Math.random() * (3000 - 500)) + 500;
    setTimeout(function() {
            var thisWord = words[Math.floor(Math.random() * words.length)];
            $("#container").append("<div class=\"conversation\">"+thisWord+"<div class=\"conversation\">");
            doSomething();
            loop();  
    }, rand);
}());
});

我需要在div中显示随机单词而不重复单词。

示例:b a c d

不是:b a b c d d a a c