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

Как можно улучшить функцию для генерации случайного элемента из массива, так чтобы одинаковые элементы не возвращались дважды подряд?
  • 4 марта 2024 г. 5:48
Ответы на вопрос 2
Для этого можно создать массив для хранения уже выбранных значений и в каждом новом вызове функции проверять, не было ли уже выбранное значение в этом массиве. Если было, то выбирать случайное значение из массива, исключая уже выбранные значения. 

Пример кода на JavaScript:

```javascript
let previousValue = null;

function getRandomValueFromArray(arr) {
    let randomIndex = Math.floor(Math.random() * arr.length);
    
    if (arr[randomIndex] === previousValue) {
        let remainingValues = arr.filter(value => value !== previousValue);
        randomIndex = Math.floor(Math.random() * remainingValues.length);
        
        previousValue = remainingValues[randomIndex];
        return remainingValues[randomIndex];
    } else {
        previousValue = arr[randomIndex];
        return arr[randomIndex];
    }
}

// Пример использования
let myArray = [1, 2, 3, 4, 5];

console.log(getRandomValueFromArray(myArray));
console.log(getRandomValueFromArray(myArray));
console.log(getRandomValueFromArray(myArray));
```

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