Какой лучший способ избавиться от вложенных циклов в Javascript?
//Write the links to the page.
for (var x = 0; x < Args.length; x++)
{
for (var Heading in Navigation.Headings)
{
for (var Item in Navigation.Headings[Heading])
{
if (Args[x] == Navigation.Headings[Heading][Item].Name)
{
document.write("<a href=\""
+ Navigation.Headings[Heading][Item].URL + "\">"
+ Navigation.Headings[Heading][Item].Name + "</a> : ");
break; // <---HERE, I need to break out of two loops.
}
}
}
}
javascript
loops
nested-loops
break
Гари Уиллоуби
источник
источник
Ответы:
Так же, как Perl,
как определено в EMCA-262 раздел 12.12. [MDN Docs]
В отличие от C, эти метки могут использоваться только для
continue
иbreak
, а Javascript не имеетgoto
.источник
continue
иbreak
.Заверните это в функцию, а затем просто
return
.источник
Я немного опаздываю на вечеринку, но следующий подход не зависит от языка и не использует GOTO / ярлыки или перенос функций:
С другой стороны, он течет естественно, что должно радовать толпу не GOTO. С другой стороны, внутренний цикл должен завершить текущую итерацию перед завершением, поэтому он может быть неприменим в некоторых сценариях.
источник
break
илиcontinue
сразу после установки z и y? Мне действительно нравится идея использоватьfor
условия цикла, чтобы выкинуть. Элегантно по-своему.Я понимаю, что это действительно старая тема, но поскольку моего стандартного подхода еще нет, я решил опубликовать его для будущих гуглеров.
источник
condition
вычисляютсяtrue
на первой итерации вложенного цикла, вы по-прежнему выполняете оставшиеся 10 итераций,abort
каждый раз проверяя значение. Это не проблема производительности для 10 итераций, но, скажем, с 10 000.abort
и выражения. В простых сценариях, которые могут быть хорошими, но для огромных циклов с повторениями в gazillion, которые могут быть проблемойКак это? :)
источник
x
, если какая-либо логика в цикле ссылается на x в более поздний момент времени (например, он определяет внутреннюю анонимную функцию, которая сохраняется и выполняется позже), значение для x будет любым был в конце цикла, а не индекс, который функция была определена во время. (продолжение)x
в качестве параметра вашу анонимную функцию, чтобы она создала новую копию, на которую затем можно ссылаться как на закрытие, поскольку она не изменится с этого момента. Короче, я рекомендую ответ ephemient.Достаточно просто:
источник
loop1=loop2=false;
Вот пять способов вырваться из вложенных циклов в JavaScript:
1) Установить родительский (ые) цикл до конца
2) Используйте этикетку
3) Используйте переменную
4) Используйте функцию самовоспроизведения
5) Используйте обычную функцию
источник
break 2;
как у нас в PHP. Нет меток циклов, нет функций, нет проверок if-else, нет закалки с / удаления переменных цикла - просто чистый синтаксис!Как насчет использования без разрывов, без флагов отмены и без дополнительных проверок условий. Эта версия просто взрывает переменные цикла (делает их
Number.MAX_VALUE
), когда условие выполняется, и принудительно завершает все циклы.Был найден аналогичный ответ для вложенных циклов убывающего типа, но он работает для вложенных циклов инкрементного типа без необходимости учитывать значение завершения каждого цикла для простых циклов.
Другой пример:
источник
Как насчет подталкивания петель к их предельным пределам?
источник
Если вы используете Coffeescript, есть удобное ключевое слово «do», которое упрощает определение и немедленное выполнение анонимной функции:
... так что вы можете просто использовать "возврат", чтобы выйти из циклов.
источник
for
цикла, а не два.Я думал, что покажу функционально-программный подход. Вы можете отказаться от вложенных функций Array.prototype.some () и / или Array.prototype.every (), как в моих решениях. Дополнительным преимуществом этого подхода является то, что он
Object.keys()
перечисляет только собственные перечисляемые свойства объекта, тогда как «цикл for-in перечисляет свойства и в цепочке прототипов» .Близко к решению ОП:
Решение, которое сокращает итерацию по заголовкам / элементам:
источник
Уже упоминалось ранее swilliams , но с примером ниже (Javascript):
источник
Хм привет на вечеринку 10 лет?
Почему бы не поставить какое-то условие в вашу пользу?
Как это вы останавливаетесь, когда хотите
В моем случае, используя Typescript, мы можем использовать some (), которые проходят через массив и останавливаются при выполнении условия. Поэтому мой код выглядит так:
Таким образом, цикл останавливается сразу после выполнения условия
Напоминание: этот код выполняется в TypeScript
источник
источник
лучший способ -
1) Сортировать оба массива, которые используются в первом и втором цикле.
2) если элемент соответствует, разорвать внутренний цикл и удерживать значение индекса.
3) при запуске следующей итерации запускают внутренний цикл со значением удержания индекса.
источник