Js break foreach: javascript — Short circuit Array.forEach like calling break

Операторы перехода — Kotlin

В Kotlin определено три оператора перехода:

  • return по умолчанию производит возврат из ближайшей окружающей его функции или анонимной функции;
  • break завершает выполнение ближайшего окружающего его цикла;
  • continue продолжает выполнение цикла со следующего его шага, без обработки оставшегося кода текущей итерации.

Все эти выражения можно использовать как часть более крупных выражений:

val s = person.name ?: return

Эти выражения имеют тип Nothing.

Метки операторов break и continue

Любое выражение в Kotlin может быть помечено меткой label. Метки имеют форму идентификатора, за которым следует знак @, например abc@ или fooBar@. Для того чтобы пометить выражение, мы просто ставим метку перед ним.

loop@ for (i in 1..100) {
    // ...
}

Теперь мы можем уточнить значения операторов break или continue с помощью меток.

loop@ for (i in 1..100) {
    for (j in 1..100) {
        if (...) break@loop
    }
}

Оператор break, отмеченный @loop, переводит выполнение кода в точку сразу после цикла, отмеченного этой меткой. Оператор continue продолжает цикл со следующей его итерации.

Возврат к меткам

В Kotlin функции могут быть вложены друг в друга с помощью литералов функций, локальных функций и анонимных объектов. Подходящий return позволит вернуться из внешней функции. Одним из самых важных применений этой синтаксической конструкции является возврат из лямбда-выражения. Напомним, что в таких случаях, как в примере ниже, return возвращает из ближайшей заключающей функции — foo:

fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return // нелокальный возврат, непосредственно к объекту вызывающему функцию foo()
        print(it)
    }
    println("эта строка не достижима")
}

Обратите внимание, что такой нелокальный возврат поддерживается только лямбда-выражениями, переданными инлайн-функциям. Чтобы вернуться из лямбда-выражения, к оператору стоит поставить метку и тем самым сделать уточнение для return.

fun foo() {
    listOf(1, 2, 3, 4, 5).forEach lit@{
        if (it == 3) return@lit // локальный возврат внутри лямбды, то есть к циклу forEach
        print(it)
    }
    print(" выполнится с использованием явной метки(lit@)")
}

Теперь он возвращает только из лямбда-выражения. Зачастую намного более удобно использовать неявные метки, потому что такие метки имеют такое же имя, как и функция, к которой относится лямбда.

fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return@forEach // локальный возврат внутри лямбды, то есть к циклу forEach
        print(it)
    }
    print(" выполнится с использованием неявной метки(forEach@)")
}

Возможно также использование анонимной функции в качестве альтернативы лямбда-выражениям. Оператор return возвращает из самой анонимной функции.

fun foo() {
    listOf(1, 2, 3, 4, 5). forEach(fun(value: Int) {
        if (value == 3) return  // локальный возврат внутри анонимной функции, то есть к циклу forEach
        print(value)
    })
    print(" выполнится с использованием анонимной функции")
}

Обратите внимание, что использование локальных возвратов в предыдущих трех примерах аналогично использованию continue в обычных циклах.

Прямого эквивалента для break не существует, но его можно смоделировать — добавить еще одну вложенную лямбду и нелокально вернуться из нее.

fun foo() {
    run loop@{
        listOf(1, 2, 3, 4, 5).forEach {
            if (it == 3) return@loop // нелокальный возврат из лямбды к вызывающему run
            print(it)
        }
    }
    print(" выполнится с использованием вложенной метки")
}

При возвращении значения парсер отдаёт предпочтение специализированному возврату.

return@a 1

что значит «верни 1 в метке @a«, а не «верни выражение с меткой (@a 1)«.

Правильный способ выйти из цикла forEach в JavaScript

Как выйти из цикла forEach в JavaScript и выйти из него? Короткий ответ: вы не можете. Выйти из forEach циклов в JavaScript невозможно. Тем не менее, есть некоторые обходные пути, а также есть альтернативы.

Хотя мы не можем выйти из forEach в JavaScript, мы все же можем вернуть значения с помощью внешней переменной следующим образом:

 let productDetails
products.forEach(продукт => {
    если (продукт.id === 123) {
        сведения о продукте = продукт
    }
}) 

forEach.js Обходной путь для возврата значения из forEach

Скопировано в буфер обмена!

Здесь мы, по сути, устанавливаем переменную вне цикла forEach для одного из элементов на основе идентификатора. Учитывая правильное условие внутри оператора if , мы можем получить и «вернуть» правильное значение. Однако это можно переписать лучше. Вот пять различных альтернатив, которые вы можете использовать, когда вам нужно отказаться от forEach .

Хотите улучшить свои навыки? Ознакомьтесь с нашим интерактивным курсом, чтобы освоить JavaScript от начала до конца.


Использование Array.find

Приведенный выше пример можно также переписать с помощью метода find . Как следует из названия, метод find используется для поиска определенного элемента в массиве. Он возвращает один элемент, который первым проходит проверку в функции обратного вызова. Например:

 // Это вернет продукт с идентификатором 1
products.find(product => product.id === 1)
// Даже если у нас может быть несколько товаров со скидкой
// это вернет только первое совпадение
products.find(product => product.onSale)
// Это вернет значение undefined
products.find(product => product.id === 'invalid') 

find.js Возвращает элемент с заданным предикатом

Скопировано в буфер обмена!

В первом примере возвращается один объект, поскольку каждый идентификатор уникален. Но во втором случае у нас может быть несколько товаров в продаже, но мы все равно получим только первый, прошедший тест. Если совпадений нет, метод find просто возвращает undefined .


Использование Array.findIndex

Аналогичное, но немного отличающееся решение для

find использует метод findIndex . Если вам нужно вернуть индекс элемента внутри массива, вы можете использовать метод findIndex . Это вернет индекс элемента, если он найден. Если элемент с предикатом не найден, возвращается -1.

 // Это вернет 2
[1, 2, 3].findIndex(число => число === 3)
// Это вернет -1
[1, 2, 3].findIndex(число => число === 4) 

findIndex.js Возвращает индекс элемента или -1, если элемент не найден

Скопировано в буфер обмена!

Хотите улучшить свои навыки? Ознакомьтесь с нашим интерактивным курсом, чтобы освоить JavaScript от начала до конца.


Использование Array.

some для возврата True или False

Если вам нужно выйти из цикла и вернуть логическое значение, мы можем использовать метод some . В отличие от find , где мы ожидаем, что элемент будет возвращен из массива, some возвращает либо true

, либо false . Если хотя бы один элемент в массиве соответствует критериям, этот метод мгновенно вернет правда . Возьмем в качестве примера следующее.

 // У нас есть некоторые продукты, которые продаются со скидкой, так что мы верим
products.some(product => product.onSale)
// Ни один из элементов не меньше 0, поэтому мы возвращаем false
[1, 2, 3].some(item => item <0)
 

some.js Возвращает значение true или false, если хотя бы один элемент соответствует предикату.

Скопировано в буфер обмена!

В первом примере мы возвращаем true , поскольку нас интересует только наличие хотя бы одного товара в продаже. Аналогично, во втором примере нас интересует только, есть ли хотя бы один элемент ниже 0. Поскольку ни один из них не ниже 0, метод возвращает 9.0003 ложь

.


Использование Array.every для проверки каждого элемента. Но вместо того, чтобы проверять, проходит ли предикат один элемент, он возвращает

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

 // Выдает false
products.every(product => product.onSale)
// Это дает истину
products.every(product => product.name) 

every.js Возвращает true, если все элементы проходят предикат. В противном случае возвращается false

Скопировано в буфер обмена!

В первом примере мы получаем false , так как, возможно, не все товары есть в продаже. Однако мы можем проверить, есть ли у каждого продукта имя, и в этом случае каждые будут давать истинное значение .

Хотите улучшить свои навыки? Ознакомьтесь с нашим интерактивным курсом, чтобы освоить JavaScript от начала до конца.


Использование обычных циклов

И последнее, но не менее важное: мы также можем использовать обычные циклы, которые поддерживают операторы

break и continue . В приведенном ниже примере мы используем обычный цикл for , for... of и while , чтобы продемонстрировать, как прерваться, когда выражение истинно .

 константный массив = [1, 2, 3]
// Использование цикла for
for (пусть я = 0; я <массив.длина; я++) {
    если (массив [i] === 2) {
        сломать
    }
    console.log(массив[i])
}
// Использование цикла for...of
for (константный элемент массива) {
    если (элемент === 2) {
        сломать
    }
    console.log(элемент)
}
// Использование цикла while
пусть я = 0
в то время как (я <массив.длина) {
    если (массив [i] === 3) {
        сломать
    }
    console. log(я)
    я++
} 

Использование цикла for, for...of и while для прерывания

Скопировано в буфер обмена!

Если вы хотите узнать больше о других методах работы с массивами, таких как map , filter или reduce , обязательно ознакомьтесь с нашей статьей ниже.

Сила функций массивов высшего порядка

найти, некоторые, сопоставить, уменьшить, каждый, фильтровать
Узнайте все, что вам нужно знать о методах массивов высшего порядка и о том, как вы можете использовать их в полной мере.

Оператор JavaScript break

❮ Справочник по операторам JavaScript Далее ❯

Примеры

Выход из цикла, когда i равно 3:

let text = "";
for (пусть i = 0; i < 5; i++) {
  if (i === 3) break;
  text += i + "
";
}

Попробуйте сами »

let text = "";i = 0;
в то время как (i < 5) {
  text += i + "
";
  я++;
  if (i === 3) перерыв;
}

Попробуйте сами »

Дополнительные примеры ниже.


Определение и использование

Оператор break прерывает переключатель или цикл.

В выключателе выламывается из блока выключателя. Это останавливает выполнение дополнительного кода внутри коммутатора.

В цикле он выходит из цикла и продолжает выполнение кода после цикла (если есть).


Использование меток

Оператор break может использовать ссылку на метку для выхода из любого блока кода JavaScript (см. «Дополнительные примеры» ниже).

Без метки разрыв можно использовать только внутри цикла или переключателя.


Синтаксис

перерыв;

Использование дополнительной ссылки на метку:

break labelname;



Дополнительные примеры

Выйти из блока переключателей, когда верно значение case:

let day;
switch (new Date().getDay()) {
  case 0:
    day = "Воскресенье";
    перерыв;
  case 1:
    day = "Понедельник";
    перерыв;
  case 2:
    day = "Вторник";
    перерыв;
case 3:
    день = "Среда";
    перерыв;
case 4:
    день = "Четверг";
    перерыв;
  случай 5:
   день = "Пятница";
    перерыв;
  случай 6:
   день = "Суббота";
    перерыв;
}

Попробуйте сами »

Вырваться из списка:

пусть текст = "";
машин = ["BMW", "Volvo", "Saab", "Ford"];

список: {
  text += cars[0] + "
";
  text += cars[1] + "
";
  text += cars[2] + "
";
 список перерывов;
  text += cars[3] + "
";
}

Попробуйте сами »

Пример

Выход из вложенного цикла:

// Первый цикл for помечен как "Loop1"
Loop1:
for (let i = 0; i < 3; i++) {

// Второй цикл for помечен как "Loop2"
Loop2:
  for (let i = 10; i < 15; i++) {
    if (i === 12) break Loop1;
  }
}

Попробуйте сами »


Связанные страницы

Учебник по JavaScript: JavaScript Break and Continue

Учебник по JavaScript: JavaScript For Loop

Учебник по JavaScript: JavaScript While Loop

Учебник по JavaScript: JavaScript Switch

7 900 continue continue Заявление

Справочник по JavaScript: JavaScript для заявления

Справочник по JavaScript: JavaScript while Заявление

Справочник по JavaScript: Заявление о переключении JavaScript


Поддержка браузера

break — это функция ECMAScript1 (ES1).

ES1 (JavaScript 1997) полностью поддерживается во всех браузерах:

Хром Край Firefox Сафари Опера ИЭ
Да Да Да Да Да Да

❮ Справочник по операторам JavaScript Следующий ❯


ВЫБОР ЦВЕТА



Лучшие учебники
Учебник HTML
Учебник CSS
Учебник JavaScript
Учебник How To Tutorial
Учебник SQL
Учебник Python
Учебник W3.CSS
Учебник Bootstrap
Учебник PHP
Учебник Java
Учебник по C++
Учебник по jQuery

Основные ссылки
Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *