Выберите значение из массива JS и пропустите его, пока не отобразятся все значения - PullRequest
0 голосов
/ 08 июля 2019

У меня есть массив, который состоит из 6 значений.Я использую Math.random, чтобы перетасовать его.Тем не менее, он перетасовывает массив каждый раз и отображает значение, которое повторяется.Я хочу перемешать массив и получить 1 уникальное значение.Это значение должно быть удалено из массива до любого другого значения, если оно выбрано.Например, если в массиве есть элементы 1,2,3,4, и после перемешивания он отвечает 3. Теперь я хочу, чтобы он исключил 3 и получил новое значение из 1,2,4.

I


    const params = {
      icon_emoji: ':laughing:'
    };
    var members=['1','2','3','4','5','6','7'];
    var assignee = members[Math.floor(Math.random()*members.length)];

      bot.postMessageToChannel('general', `It's ${assignee}'s turn today!`, params);


}

function results() {


    const params = {
      icon_emoji: ':laughing:'
    };
    bot.postMessageToChannel('general', `Inside results`, params);


}

Ответы [ 2 ]

2 голосов
/ 08 июля 2019

Ваше определение "shuffle" неверно ... Вместо того, чтобы выбирать случайные элементы из массива, а затем придется склеивать их из массива, почему бы на самом деле не перемешать (т.е. изменить порядок в случайном порядке)весь массив, используя случай Фишера-Йейтса , а затем просто вытолкнуть элементы из этого массива?

Функция shuffle ниже воспроизводится из этого ответа :

function shuffle(array) {
  let currentIndex = array.length,
    temporaryValue, randomIndex;

  // While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

const myArr = [1, 2, 3, 4, 5, 6];
shuffle(myArr);
while (myArr.length > 0) {
  console.log(myArr.pop());
}

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

1 голос
/ 08 июля 2019

Вы можете использовать функцию array.splice , чтобы удалить элемент из массива

members.splice(Math.floor(Math.random()*members.length), 1);

Примечание : Если вы хотите сохранить исходный массив, я бы порекомендовал вам создать временный массив и выполнить манипуляции с этой переменной

...