петли во вложенных циклах
Доброго времени суток уважаемые форумчане,
Попробую объяснить смысл моего вопроса. Есть незамысловатый код: 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, НО в частном случае мне потребуется несколько значений. Надеюсь правильно сформулировал задачу. |
atanov,
:-? |
рони,
Наверно не так сформулировал - так наверное будет правильнее как повторить итерацию цикла при определенном условии. |
atanov,
не понимаю |
atanov,
Тебе надо в результате, чтобы obj[i][j].z было случайным целым, от 0 до 10, но не 6? (i = 0...3, j = 0...2) |
Alexandroppolus,
Нужно в общем виде вот это: повторить текущую итерацию цикла при определенном условии. Именно повторить, т.е. continue не подходит. Смотрел в сторону меток с break, толком не понял, можно ли на текущий цикл отослать, а не на цикл уровнем выше. Если да, то это «почти» решение, останется смирится с перезапуском цикла. |
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 и т.п., но с обычным циклом в самый раз. |
Alexandroppolus,
Спасибо. Второй вариант визуально прикольнее выглядит :dance: |
Часовой пояс GMT +3, время: 04:51. |