2015-04-16 1 views
1

Я генерирующий элементы, которые имеют случайные данные атрибуты, как так:Создания набора случайных элементов с последующим поколением «один на один»

generateCards : function(n) 
     { 
      var actions = ['press', 'blue-right', 'blue-left', 'red-right', 'red-left'], 
       i = n, 
       ran, 
       actions_cpy = actions.slice(); 

      for (; i--;) { 
       ran = (Math.random() * actions_cpy.length)|0; 
       $('#container-game-mobile').prepend(
        $('<div>', { 
        // remove and return a random string from the array 
        'class': 'game-card-mobile', 
        'data-action': actions_cpy.splice(ran, 1)[0] 
        }) 
       ); 
       // load the array backup with values when it is empty 
       if (actions_cpy.length === 0) { 
        actions_cpy = actions.slice(); 
       } 
      } 
     } 

Функция работает в пути, где есть более или менее равные количества каждый атрибут данных из массива действий. Я изначально генерирую 10 элементов, поэтому n = 10 из-за характера приложения каждый раз, когда действие выполняется на .game-card-mobile. Я уничтожаю его и вам нужно сгенерировать новый, так что вызывайте функцию выше, но теперь с n = 1. Проблема здесь в том, что мне почему-то нужно называть элементы, которые все равно будут отличаться, поэтому предотвратите появление «синего права» снова и снова.

+0

Выполняется ли '' '' 'случайное число, когда' n = 1'? – guest271314

+0

@ guest271314 yes – Ilja

+0

'actions_cpy.splice (ran, 1) [0]' не возвращать случайный элемент из 'actions_cpy', а' ran' возвращать случайное число и 'n = 1'? – guest271314

ответ

1

Это немного запутанно, но я думаю, что у меня проблема.

Вам нужна функция, чтобы получить свои действия, эта функция будет возвращать случайную этого массива, в этой функции, передайте параметров ваших последних действий рандомизированные и если ваша случайная такая же, как ваш последний случайный , повторите ту же функцию, это предотвратит вашу проблему.

Смежные вопросы