Пример цикла в цикле:
Код
for (let i = 0; i < 3; i++) {
console.log(`Основной цикл, i равно ${i}`);
for (let j = 0; j < 3; j++) {
console.log(`j равно ${j}`);
}
}
Цитата
Основной цикл, i равно 0
j равно 0
j равно 1
j равно 2
Основной цикл, i равно 1
j равно 0
j равно 1
j равно 2
Основной цикл, i равно 2
j равно 0
j равно 1
j равно 2
Создание с помощью вложенного цикла фигуры треугольник Цитата
*
**
***
****
*****
******
Основной цикл отвечает за создание рядов фигуры, а вложенный - за наполнение рядов звёздочками.
Отталкиваться будем от пустой строки, которая будет затем заполняться и выводиться в консоль.
Ограничение на количество рядов задаем в отдельной переменной:
Собственно весь код решения:
Код
let result = "";
const length = 7;
for (let i = 1; i < length; i++) {
for (let j = 0; j < i; j++) {
result += "*";
}
result += "\n";
}
console.log(result);
Как это работает:
Запускается основной цикл
i = 1
Запускается встроенный цикл
j = 0
в строку добавляется одна звёздочка
добавляется перенос строки
Продолжается основной цикл
i = 2
Запускается встроенный цикл
j = 0
в строку добавляется одна звёздочка
j = 1
в строку добавляется ещё одна звёздочка
добавляется перенос строки
И так далее.
Как быть, если из вложенного цикла нужно сразу перейти к следующей итерации основного цикла? Возьмём цикл с двумя уровнями вложенности:
Код
for (let i = 0; i < 3; i++) {
console.log(`First level: ${i}`);
for (let j = 0; j < 3; j++) {
console.log(`Second level: ${j}`);
for (let k = 0; k < 3; k++) {
console.log(`Third level: ${k}`);
}
}
}
Добавим условие, что если
k = 2, то мы начнём основной цикл с новой итерации, то есть завершим два внутренних и перейдём сразу к следующей итерации основного.
Для этого нужна
метка - чёткое указание где останавливать или продолжать цикл.
Код
first: for (let i = 0; i < 3; i++) {
console.log(`First level: ${i}`);
for (let j = 0; j < 3; j++) {
console.log(`Second level: ${j}`);
for (let k = 0; k < 3; k++) {
if (k === 2) continue first;
console.log(`Third level: ${k}`);
}
}
}
В данном случае,
first - это и есть метка, а в условии мы ссылаемся на неё, показывая, что если условие верно, запустить основной цикл.
Цитата
First level: 0
Second level: 0
Third level: 0
Third level: 1
First level: 1
Second level: 0
Third level: 0
Third level: 1
First level: 2
Second level: 0
Third level: 0
Third level: 1
Если вместо
continue использовать
break, то как только
k примет значение 2, сработает
break и благодаря метке весь основной цикл полностью остановится.
Всего комментариев: 0