Сообщение от рони
|
видимо я не понимаю как работает строка 27, почему цикл по массиву бесконечен?
|
Раз список содержит бесконечное кол-во элементов, то и перечисление будет бесконечно, не так ли?
Для того, чтобы у вас получилось понять, можно это рассмотреть! Давайте рассмотрим массив
["a", "b", "c"]. Вы его можете перебрать и получится три вхождения. Но что, если вы хотите, чтобы после того, как при перечислении был достигнут последний элемент, то вместо того, чтобы закрывать итератор, мы пойдём дальше сначала списка?
Мы можем создать функцию, которая приводит любой список к такому перечислению! Назовём её cycle...
function* cycle(xs) {
yield* xs;
yield* cycle(xs);
}
// дополнительная функция, которая берёт определённое кол-во элементов списка
function* take(n, i) {
for(const v of i) {
if(n-- <= 0) break;
yield v;
}
}
console.log([...take(10, cycle(["a", "b", "c"]))]);
console.log([...take(10, cycle("123"))]);
В посте №3 тогда функция getColors не нужна, а строка 27 может быть выражена так...
const colors = [
{ color: "red", "text": "Красный" },
{ color: "gold", "text": "Жёлтый" },
{ color: "green", "text": "Зелёный" },
];
for(const { color, text } of cycle(colors)) {