Как я могу разорвать цикл for in из вложенной функции forEach в Javascript?

#javascript #for-loop #foreach #break

#javascript #for-цикл #foreach #перерыв

Вопрос:

У меня есть циклы this

 for (var key in params) {
  if (Array.isArray(params[key])) {
    params[key].every(function(item) {
      let value = something(item.start, item.end);
      if (value === item.start || value == item.end) {
        return false // break
      }
    })
  }
}
  

Когда я устанавливаю return false остановку every() функции, я также хочу остановить первый цикл. Как я могу это сделать? Я попробовал это:

 OUTER_LOOP: for (var key in params) {
  if (Array.isArray(params[key])) {
    params[key].every(function(item) {
      let value = something(item.start, item.end);
      if (value === item.start || value == item.end) {
        return false // break
        break OUTER_LOOP; // not working
      }
    })
  }
}
  

но это не работает таким образом … итак, как я могу правильно остановить every() функцию и первый цикл одновременно?

Комментарии:

1. можете ли вы поделиться содержимым параметра

Ответ №1:

Вы могли бы взять Array#some и вернуть true для выхода some и использовать возвращаемое значение some для разрыва цикла.

 for (var key in params) {
    if (Array.isArray(params[key])) {
        const
            leave = params[key].some(item => {
                let value = something(item.start, item.end);

                // exit condition should return true/truthy value
                // for leaving the outer loop
                return value === item.start || value == item.end;
            });

        if (leave) break;
    }
}
  

Комментарии:

1. спасибо, но return true цикл не останавливается for (var key in params)

2. да, пожалуйста, см. Редактирование. результат должен быть выведен наружу с помощью проверки.

3. спасибо, я снова обновил свой код, потому что я кое-что забыл… работает ли он по-прежнему some() ? не могли бы вы взглянуть еще раз?

4. спасибо за обновление. Но у меня есть одна проблема. something() возвращает, например, значение с плавающей запятой, например 0.99 , если item.end 1 так, что циклы заканчиваются раньше 1 , чем so в моей console.log() я вижу, что оно заканчивается 0.99 вместо 1. Как я могу изменить условие if, чтобы я также мог видеть 1 один раз, а затем цикл прерывается? или мне нужно передать другие мои вещи раньше return value ?

5. вы могли бы округлить значение …?