#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. вы могли бы округлить значение …?