Давайте представим, что у меня есть генератор, который в итоге останавливается
function* letters () {
let offset = 0
while (offset < 26)
yield String.fromCharCode(65 + offset++)
}
console.log(Array.from(letters()))
// => [ "A", "B", "C", ..., "X", "Y", "Z" ]
Используя этот генератор в качестве входных данных, я хочу создать другой генератор, но для этого я бы хотел, чтобы значения выводились в случайном порядке
function* randomizeGen (gen) {
// ...
}
Array.from(randomizeGen(letters()))
// => [ "X", "T", "L", "P", "A", ..., "G", "S", "B" ] (all 26 letters)
Новый генератор должен быть ленивым, как и первый, но я не могу понять, как написать его умным способом
function shuffleArray (arr) {
// return shuffled array
}
function* randomizeGen (gen) {
const all = Array.from(gen) // help!
for (const one of shuffleArray(all))
yield one
}
Это бы сработало, но это было сделано, сначала полностью исчерпав gen
. В действительности, мой первоначальный генератор выводит миллионы значений , поэтому я не думаю, что собирать их все в массив сначала - хорошая идея. Смысл использования генератора в том, что я могу обрабатывать значения по одному
Честно говоря, я понятия не имею, как рандомизировать выходной сигнал генератора, но в то же время держу его ленивым. Может кто-нибудь помочь, пожалуйста?