massiv.forEach(function(item, i) {
if (item == "1") {
console.log(i);
return false;
}
});
Есть массив со значениями.
Внутри цикла есть условие поиска значения массива.
Задача: остановить дальнейший перебор цикла при первом найденном значении.
Спасибо за помощь.
Решение: (спасибо Lieutenant Jim Dangle)
[1, 2, 3, 4, 3].some(function(el,i) {
if (el == 3) {
console.log(i);
return el;
}
});
метод forEach не предусматривает возможности прервать обход коллекции.
Если нужно проверить наличие конкретного элемента удовлетворяющего условию, лучше использовать метод some
var massiv = ['2', '1', '3'];
console.log(massiv.some(function(item) {
console.log('some', item);
return (item == "1");
}));
Если проверяются полностью объекты, можно использовать метод indexOf
var massiv = ['2', '1', '3'];
console.log(massiv.indexOf("1"));
Если нужно найти индекс элемента удовлетворяющего условию, то подойдет метод findIndex
var massiv = ['2', '1', '3'];
console.log(massiv.findIndex(function(item) {
console.log('findIndex', item);
return item == "1";
}));
Если очень хочется использовать именно forEach
- можно поместить его в try..catch и кидать ошибку если элемент найден.
var massiv = ['2', '1', '3'];
try {
massiv.forEach(function(item, i) {
console.log('foreach', i);
if (item == "1") {
throw {
reason: "finded",
index: i
}
}
});
} catch ({
reason, index
}) {
if (reason) {
console.log(reason, ':', index)
}
}
Вместо встроенных функций массива, можно также воспользоваться циклом for
. В этом случае для прерывания цикла можно использовать выражение break
Mожно остановить loop
посредством вызова несуществующей функции и перехвата ошибки:
var massiv = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
try {
massiv.forEach(function(item, i, vvv) {
console.log(item);
if (item == "5") {
vvv();
}
});
} catch (e) {}
[1, 2, 3].some(function(el) {
console.log(el);
return el === 2;
});
В методе forEach
не предусмотренa остановка как в лупе посредством брейк.
Использовать every
заместо forEach
. Когда будет false
, все остановится.
Это самый правильный способ.
massiv.every(function(item, i) {
if (item == "1") {
console.log(i);
return false;
} else {
return true;
}
});
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Необходимо посчитать сумму платежа по формуле: (Сумма займа * процентную ставку * кол-во месяцев + сумму займа)
Добрый вечер, друзьяПомогите, пожалуйста