Помните последние n пунктов в jQuery - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть код для случайного выделения одного имени из списка (это работает - см. эту скрипку ):

function pickRandom() {
  var random = Math.floor(Math.random() * 6);
  $('.stname').css('background','none').eq(random).css('background','yellow');
}

Но я бы хотел убедиться, что то же самоеимена не появляются снова и снова.Поэтому я намерен запомнить последние 3 выбранных индекса как черный список:

var recentlyAsked = new Array();
function pickRandom() {
  var random;
  do {
    random = Math.floor(Math.random() * 6);
  } while ($.inArray(random,recentlyAsked));
  recentlyAsked.push(random);
  if (recentlyAsked.length >= 4) recentlyAsked.shift();
  $('.stname').css('background','none').eq(random).css('background','yellow');
}

Это не работает;см. эту скрипку . Предупреждение: вызывает зависание браузера.

Есть предложения, пожалуйста?

Ответы [ 3 ]

4 голосов
/ 19 ноября 2011
do {
    random = Math.floor(Math.random() * 6);
  } while ($.inArray(random,recentlyAsked));

Работает вечно, потому что inArray возвращает -1, когда элемент не найден в массиве, что является истинным значением.0 - единственное число, которое является ложным значением.Ваш массив изначально пуст, поэтому ничего не найдено.

Исправьте это с помощью:

do {
    random = Math.floor(Math.random() * 6);
  } while ($.inArray(random,recentlyAsked) > -1);

Это остановится, когда он вернет -1 (не найдено)

1 голос
/ 19 ноября 2011

Просто подумал, что я бы выбросил свой код туда:

var randomArray = new Array(0, 1, 2, 3, 4, 5);
var pastArray = new Array();

function pickRandom() {
    var random = Math.floor(Math.random() * randomArray.length);
    $('.stname').css('background', 'none').eq(randomArray[random]).css('background', 'yellow');

    if (pastArray.length < 3) {
        pastArray.unshift(randomArray[random]);
        randomArray.splice(random, 1);
    } else {
        pastArray.unshift(randomArray[random]);
        randomArray.splice(random, 1, pastArray.pop());
    }
    console.log("possible values: [" + randomArray + "]");
    console.log("past values: [" + pastArray + "]");
}

Значения перемещаются назад и вперед от текущих и прошлых значений.Нет необходимости предварительно заполнять значения как «прошлые», поэтому они начинаются действительно случайными.

1 голос
/ 19 ноября 2011
var ids=['a','b','c'];
var old=['d','e','f'];//At the beginning this will need populated with 3 random values
var ran=Math.floor(Math.random() * ids.length);
var ele=ids.splice(ran,1);
old.push(ele);
ids.push(old.shift());
highlight(ele);

Вот несколько альтернативный способ сделать то, что вы хотите.Идея состоит в том, чтобы просто удалить выбранные элементы и затем добавить их обратно в исходный массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...