#javascript #foreach
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;
}
});
Ответы
Ответ 1
метод 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Ответ 2
В методе forEach не предусмотренa остановка как в лупе посредством брейк. Использовать every заместо forEach. Когда будет false, все остановится. Это самый правильный способ. massiv.every(function(item, i) { if (item == "1") { console.log(i); return false; } else { return true; } });Ответ 3
[1, 2, 3].some(function(el) { console.log(el); return el === 2; });Ответ 4
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) {}
Комментариев нет:
Отправить комментарий