Я ищу способ остановить итерации _.each()
метода underscore.js , но не могу найти решение. JQuery .each()
может сломаться, если вы это сделаете return false
.
Есть ли способ прекратить подчеркивать каждый ()?
_([1,2,3]).each(function(v){
if (v==2) return /*what?*/;
})
forEach
функция также не предлагает эту функцию.each
с замыканием (на большинстве языков) сначала необходимо отфильтровать список. Таким образом, вам не нужно беспокоиться о том, чтобы оторваться от него. Вообще говоря, если вам нужно рано выйти из итерации, возможно, есть другой способ сделать это.each
замыкания) похоже на JavaScript.Array.every
чтобы имитировать поведение, которое вы хотите.Ответы:
Вы не можете оторваться от
each
метода - он эмулируетforEach
поведение нативного метода, а нативныйforEach
не обеспечивает выхода из цикла (кроме создания исключения).Однако все надежды не потеряны! Вы можете использовать
Array.every
метод. :)По этой ссылке:
Другими словами, вы можете сделать что-то запутанное, как это ( ссылка на JSFiddle ):
Это предупредит
1
через3
, а затем «сломать» из цикла.Вы используете underscore.js, так что вы будете рады узнать , что это действительно обеспечивает
every
метод-они называют егоevery
, но , как ссылка упоминает, они также предоставляют псевдоним с именемall
.источник
_.every()
ни_.all()
метода для массивов в подчеркивании - так что придерживайтесьArray.every()
.every
. Так что следите за удобочитаемостью._.each()
имеют примечание конкретно о том факте, что вы не можете выйти из цикла, и рекомендуем использовать_.find()
вместо этого. http://underscorejs.org/#eachОбновить:
_.find будет лучше, поскольку он выходит из цикла, когда элемент найден:
** Старый **
Если вы хотите условно выйти из цикла, используйте _.filter api вместо _.each. Вот фрагмент кода
источник
_.find
делает именно то, что запрашивается: перебирать список до тех пор, пока обратный вызов не вернетсяtrue
.Вы можете посмотреть
_.some
вместо_.each
._.some
прекращает обход списка после того, как предикат верен. Результаты могут быть сохранены во внешней переменной.Смотрите http://underscorejs.org/#some
источник
источник
Может быть, вы хотите Underscore any () или find (), который остановит обработку при выполнении условия.
источник
Как и другие ответы, это невозможно. Вот комментарий о выключателе в подчеркивающем вопросе № 21
источник
Вы не можете разбить
forEach
символ подчеркивания, так как он имитирует поведение EcmaScript 5.источник
Я считаю, что если бы ваш массив был на самом деле объектом, вы могли бы вернуться, используя пустой объект.
источник
http://underscorejs.org/#each
источник
Обновить:
Вы можете «сломаться», выбросив ошибку внутрь и поймав ее снаружи: что-то вроде этого:
Это, очевидно, имеет некоторые последствия в отношении любых других исключений, которые ваш код вызывает в цикле, поэтому используйте его с осторожностью!
источник
работал в моем случае
источник