Показать сообщение отдельно
  #9 (permalink)  
Старый 23.04.2019, 11:22
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
видимо я не понимаю как работает строка 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)) {

Последний раз редактировалось Malleys, 23.04.2019 в 11:25.
Ответить с цитированием