Как я могу отфильтровать массив и выбрать из него случайный идентификатор?

#javascript #arrays #filter

#javascript #массивы #Фильтр

Вопрос:

Спокойной ночи, ребята.

Я новичок в программировании, менее 2 месяцев, поэтому я не совсем понимаю, как заставить это работать. Вот именно то, что я хочу сделать: у меня есть эта игра, которую я пытаюсь создать, в которой нужно провести розыгрыш между существующими юнитами, которые соответствуют условию «жив» и имеют «возможность использовать приз». Для этого мне сказали, что мне нужно включить массив с идентификатором единицы для единиц, которые могут его получить, а затем отфильтровать их по «is alive» на выбор с помощью генератора случайных чисел. Дело в том, что я понятия не имею, как заставить это работать. Я пробовал этот код, но он не работает. У кого-нибудь есть идеи, почему или как я должен это сделать вместо этого?

 var rafflearray = []; // the array containing the units
if (root.getExternalData().isUnitRegistered() = true) {var character = root.getCurrentSession().getPlayerList().getData()}; // establish the character as a variable

if (var character.getAliveStatus = true ) {rafflearray.push(character)}; // checks his alive status and send him to the array

var chosen = rafflearray [Math.random()*chosenarray.lenght]; // to choose amongst them
chosen.addItem()
 

Заранее спасибо за внимание!

Комментарии:

1. Math.floor(Math.random() * chosenArray.length) — попробуйте это

Ответ №1:

Я настоятельно рекомендую изучить основы Javascript (здесь раздел 1 и 2) перед этим проектом. Однако я надеюсь, что этот ответ поможет вам

Прежде всего, вы не можете использовать var внутри операторов if, таких как

  if(var character.getAliveStatus = true) 
 

И вам нужно использовать == или === вместо = , например:

 if(isAlive === true){
    // Code to be executed
}
// the difference between '==' and '===' can be found in the docs mentioned below
 

смотрите Операторы Javascript отсюда в разделе 3

var предназначен для объявления переменной, которая не ограничена ее родительскими блоками, см. Область видимости javascript

В вашем случае я не уверен, есть ли у вас уже массив игроков или вы пытаетесь его создать.

В первой ситуации я предлагаю вам использовать Array.filter() функцию, которая является классным способом. Например :

 // Assuming 'players' is the array of players in the game

// filtering out raffle worthy players
let raffle_worthy = players.filter(player => player.getAliveStatus === true); 

// Randomly choosing 1 person between the raffle worthy players
let chosen = raffle_worthy[Math.floor(Math.random * raffle_worthy.length)]
 

Возможно, вы захотите взглянуть на документы Array.filter(), а также на математику Js, которая использовалась в приведенном выше примере

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