Как сделать, чтобы функция возвращала случайные значения из массива так, чтобы подряд не шли два одинаковых значения?

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

1. Создайте функцию, которая будет принимать массив значений в качестве аргумента.
2. Внутри функции заведите переменную для хранения предыдущего выбранного значения.
3. В теле функции создайте цикл, который будет генерировать случайный индекс в массиве и проверять, не совпадает ли он с предыдущим выбранным индексом.
4. Если выбранный индекс не совпадает, верните значение из массива с этим индексом и запомните его как предыдущее значение.
5. Если индексы совпали, сгенерируйте новый случайный индекс до тех пор, пока не будет найдено подходящее значение.

Пример реализации данной функции на JavaScript:

function getRandomValueWithoutRepetition(arr) {
  let prevIndex = -1; // Инициализируем предыдущий индекс как -1
  let randomIndex;

  // Функция для генерации случайного индекса, исключая предыдущий
  function getRandomIndex() {
    let index = Math.floor(Math.random() * arr.length);
    return index !== prevIndex ? index : getRandomIndex();
  }

  return function getNextRandomValue() {
    randomIndex = getRandomIndex();
    prevIndex = randomIndex;
    return arr[randomIndex];
  };
}

const values = [1, 2, 3, 4, 5];
const getNextRandomValue = getRandomValueWithoutRepetition(values);

console.log(getNextRandomValue()); // Выведет случайное значение из массива без повторений
console.log(getNextRandomValue()); // Выведет следующее случайное значение

Этот код создает функцию, которая возвращает случайные значения из массива values, не повторяя их подряд. Алгоритм генерации случайного значения исключает предыдущий индекс, что обеспечивает разнообразие случайных значений.