从数组中随机选择值并从数组中删除该值

时间:2012-12-22 20:51:01

标签: jquery arrays random

琐碎的问题。到目前为止我所拥有的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())

     });
 });

我已经看到使用拼接方法的类似问题,我试图破解一个版本,但我想知道是否有更有效的方法。

2 个答案:

答案 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 algoritmThis post解释了它的工作原理。)