Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Прервать цикл forEach (javascript)

#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) {}

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

Отправить комментарий