2

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

​</p>

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())

     });
 });

​</p>

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

4

2 回答 2

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/

于 2012-12-22T20:58:52.840 回答
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函数基于Fisher-Yates shuffle 算法这篇文章解释了它是如何工作的。)

于 2012-12-22T21:05:49.803 回答