Вот простая хитрость для циклов javascript forEach. Взгляните на приведенную ниже функцию doFoo. Вы могли бы подумать, что он вернет true, когда дойдет до элемента массива, равного 3, однако он всегда возвращает false. ​

function doFoo() {
 var list = [1,2,3,4,5];
 list.forEach(function(item) {
 if (item == 3) {
 return true;
 }
 });
 return false;
}

«Возврат true» не вытекает из функции doFoo, он вырывается из функции foEach (что мало помогает). Чтобы переписать с правильным намерением, мы должны сохранить возвращаемый результат в переменной.

function doFoo() {
 var list = [1,2,3,4,5];
 var result = false;
 list.forEach(function(item) {
 if (item == 3) {
 result = true;
 }
 });
 return result;
}

Это правильно, но не совсем эффективно, так как он по-прежнему будет проверять каждый элемент в массиве.
Чтобы сделать это немного быстрее, мы можем использовать каждый. Вот переписанная функция:

function doFoo() {
 var list = [1,2,3,4,5];
 return !list.every(function(item) { item !== 3 });
}

Здесь мы проверяем каждый элемент, но когда мы достигаем элемента, равного 3, каждая функция выходит из функции, возвращающей результат. Также обратите внимание, что мы проверяем, содержит ли массив 3, проверяя, не равен ли каждый элемент 3.

Первоначально опубликовано на www.nexusconcepts.com.