Вы просто хотите, чтобы код, который вы написали, работал или вы хотите лучшее решение?Выбор случайных чисел до тех пор, пока вы не получите повторение, - это рецепт катастрофы, так как ваша программа останавливается на несколько секунд, пытаясь найти число, которое не было использовано.Конечно, если вы запрашиваете только несколько цифр, возможно, это не будет длиться вечно, но тогда код находится в вашей кодовой базе, и через 5 лет его использует кто-то другой, не зная, что в коде есть бомба замедленного действия.Представьте, что в массиве 10000 элементов, а 9999 выбрано.Может потребоваться 1 миллион повторных попыток, прежде чем он завершит выбор одного неиспользованного индекса.
Код, похоже, выбирает индексы с именами переменных, такими как index
и viewedIndices
Oneспособ выбрать случайные элементы просто удалить затем из массива наугад.Если вам нужно сделать копию массива
const array = ["a", "b", "c", "d", "e", "f", "g"];
while (array.length) {
const ndx = Math.random() * array.length | 0;
const elem = array.splice(ndx, 1)[0];
console.log(elem);
}
Примечание: использование Math.random() * value | 0
для получения случайного 0 -> положительного целого числа быстрее, чем Math.floor(Math.random() * value)
, поскольку |
является оператором, а не функцией, связанной сMath
объект, который необходимо проверять при каждом вызове, чтобы увидеть, был ли он заменен.