5

以下のコードを使用して、ページの個々の画像にランダムなクラス (5 つのうち) を割り当てています。

$(this).addClass('color-' + (Math.floor(Math.random() * 5) + 1));

うまく機能していますが、同じクラスが2つ連続しないようにしたいと考えています。

さらに良いのは、同じものが 2 つ連続して存在せず、5 つすべてが使用されるまでクラスを複数回使用しなかった場合です...同様に、使用されている各クラスを配列からすべて削除します。前の 5 つの最後の色と次の 5 つの最初の色が同じ色にならないようにします。

それが理にかなっていることを願っています。助けてくれてありがとう。

4

4 に答える 4

1

jfriend00の優れた答えに対する私のコメントを説明するために、すべてが返されるまでセットのメンバーをランダムな順序で返し、その後再び開始する関数を持つことができます。

function RandomList(list) {
  var original = list;
  this.getOriginal = function() {
    return original;
  }
}

RandomList.prototype.getRandom = function() {
  if (!(this.remainder && this.remainder.length)) {
    this.remainder = this.getOriginal().slice();
  }
  return this.remainder.splice(Math.random() * this.remainder.length | 0,1);
}

var list = new RandomList([1,2,3]);

list.getRandom(); // returns a random member of list without repeating until all
                  // members have been returned.

リストをハードコードできる場合は、オリジナルをクロージャーに保持できます。

var randomItem = (function() {
  var original = [1,2,3];
  var remainder;
  return function() {
    if (!(remainder && remainder.length)) {
      remainder = original.slice();
    }
    return remainder.splice(Math.random() * remainder.length | 0, 1);
  };
}());
于 2013-10-14T02:11:39.267 に答える