Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   петли во вложенных циклах (https://javascript.ru/forum/css-html/77218-petli-vo-vlozhennykh-ciklakh.html)

atanov 07.04.2019 12:37

петли во вложенных циклах
 
Доброго времени суток уважаемые форумчане,
Попробую объяснить смысл моего вопроса.
Есть незамысловатый код:
let obj = {};
for(let x = 0; x < 4; x++)
{	
	obj[x] = {};
	loop:
		for(let z = 0; z < 3; z++)
		{
			let value = Math.floor(10*Math.random(0, 10));
			if (value == 6)
			{
				break loop;
			}
			else
			{
				obj[x][z] = {z: value};
			}		
		}
}
console.log(obj);

идея такая - сделать так, чтобы объект obj заполнился подобъектами, в которых три ключа и три значения - случайное целое число от 0 до 10. Если значение = 6, то нужно, чтобы пробежался внутренний цикл не с начала, а с момента, когда в стр. 10 true и до конца. Конечно, я понимаю, что можно в стр. 15 установить формулу из стр. 8, НО в частном случае мне потребуется несколько значений. Надеюсь правильно сформулировал задачу.

рони 07.04.2019 13:21

atanov,
:-?

atanov 07.04.2019 21:59

рони,
Наверно не так сформулировал - так наверное будет правильнее как повторить итерацию цикла при определенном условии.

рони 07.04.2019 22:30

atanov,
не понимаю

Alexandroppolus 07.04.2019 22:42

atanov,
Тебе надо в результате, чтобы obj[i][j].z было случайным целым, от 0 до 10, но не 6?
(i = 0...3, j = 0...2)

atanov 07.04.2019 23:07

Alexandroppolus,
Нужно в общем виде вот это: повторить текущую итерацию цикла при определенном условии. Именно повторить, т.е. continue не подходит. Смотрел в сторону меток с break, толком не понял, можно ли на текущий цикл отослать, а не на цикл уровнем выше. Если да, то это «почти» решение, останется смирится с перезапуском цикла.

Alexandroppolus 08.04.2019 06:11

let obj = {};
for(let x = 0; x < 4; x++)
{	
	obj[x] = {};
	for(let z = 0; z < 3; z++) {
		let completed = false;
		while (!completed) {
			let value = Math.floor(10*Math.random(0, 10));
			if (value !== 6) {
				obj[x][z] = {z: value};
				completed = true;
			}		
		}
	}
}
console.log(obj);


или, например, так:
let obj = {};
for(let x = 0; x < 4; x++)
{	
	obj[x] = {};
	for(let z = 0; z < 3; z++) {
		let value = Math.floor(10*Math.random(0, 10));
		if (value === 6) {
			z--;
		} else {
			obj[x][z] = {z: value};
		}
	}
}
console.log(obj);

этот вариант не получится использовать для циклов, упрятанных внутрь forEach и т.п., но с обычным циклом в самый раз.

atanov 08.04.2019 19:18

Alexandroppolus,
Спасибо. Второй вариант визуально прикольнее выглядит :dance:


Часовой пояс GMT +3, время: 07:39.