0

Как остановить цикл _.each в lodash.js?

11

У меня есть следующий код для обработки строк:

_.each($scope.inspectionReviews, function (value, key) {
    alert("status=" + value.IsNormal + "   " + "name=" + value.InspectionItemName);
    if (!value.IsNormal) {
        $scope.status = false;
        return;
    }
    $scope.status = true;
});

В какой-то момент я хочу остановить цикл, но, похоже, что оператор return не работает как ожидается.

Как я могу остановить выполнение цикла?

2 ответ(ов)

1

Для того чтобы прервать цикл each в библиотеке lodash, вы можете использовать return false; внутри коллбэка. Это нормально сработает, поскольку lodash позволяет использовать этот подход для выхода из цикла.

_.each(array, function(value) {
    if (someCondition(value)) {
        return false; // Это прервет цикл
    }
    // Другие действия
});

Но важно отметить, что если вы используете underscore, то поведение будет другим. В underscore each фактически является оберткой вокруг forEach, и в JavaScript стандартный метод forEach не поддерживает выход из цикла с использованием return false;. В таком случае единственным вариантом будет использование обычного цикла for, который позволяет прерывать итерацию с помощью break.

Таким образом, если вам нужно прерывать итерацию, и вы не уверены, какую библиотеку использовать, лучше использовать lodash для этой цели. Если вы хотите использовать underscore, вам придется применить другой подход, например, обычный цикл.

0

При использовании return false в функции, это действительно эквивалентно использованию break;. В обоих случаях происходит выход из текущего контекста выполнения, что приводит к немедленному завершению работы функции.

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

Таким образом, несмотря на определенные сходства, эти операторы имеют разные контексты применения и поведение.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь