JavaScript. Подробное руководство, 6-е издание, стр. 82

<b>var data = [1,2,3,4,5]; // Массив, элементы которого будут суммироваться </b>

<b>// Найти сумму элементов массива</b>

<b>var sum =0; // Начальное значение суммы 0</b>

<b>data.forEach(function(value) { sum += value; }); // Прибавить значение к sum </b>

<b>sum // =&gt; 15</b>

<b>// Увеличить все элементы массива на 1</b>

<b>data.forEach(function(v, і, а) { а[і] = v + 1; });</b>

<b>data // =&gt; [2,3,4,5,6]</b>

Обратите внимание, что метод

<b>fогEach()</b>
не позволяет прервать итерации, пока все элементы не будут переданы функции. То есть отсутствует эквивалент инструкции
<b>break</b>
, которую можно использовать с обычным циклом
<b>for</b>
. Если потребуется прервать итерации раньше, внутри функции можно возбуждать исключение, а вызов
<b>forEach()</b>
помещать в блок
<b>try</b>
. Ниже демонстрируется функция
<b>foreach()</b>
, вызывающая метод
<b>forEach()</b>
внутри такого блока
<b>try</b>
. Если функция, которая передается функции
<b>foreach()</b>
, возбудит исключение
<b>foreach.break</b>
, цикл будет прерван преждевременно:

<b>function foreach(a,f,t) { </b>

<b>  try { </b>

<b>    a.forEach(f,t); </b>

<b>  } catch(e) {</b>

<b>    if (e === foreach.break) </b>

<b>      return; </b>

<b>    else throw e;</b>

<b>  }</b>

<b>}</b>

<b>foreach.break = new Error(&quot;StopIteration&quot;);</b>

7.9.2. Метод map()

Метод

<b>map()</b>
передает указанной функции каждый элемент массива, относительно которого он вызван, и возвращает массив значений, возвращаемых этой функцией. Например:

<b>а = [1, 2, 3];</b>

<b>b = a.map(function(x) { return х*х; }); // b = [1, 4, 9]</b>

Метод

<b>map()</b>
вызывает функцию точно так же, как и метод
<b>forEach()</b>
. Однако функция, передаваемая методу
<b>map(),</b>
должна возвращать значение. Обратите внимание, что
<b>map()</b>
возвращает новый массив: он не изменяет исходный массив. Если исходный массив является разреженным, возвращаемый массив также будет разреженным: он будет иметь ту же самую длину и те же самые отсутствующие элементы.

7.9.3. Метод filter()

Метод

<b>filter()</b>
возвращает массив, содержащий подмножество элементов исходного массива. Передаваемая ему функция должна быть функцией-предикатом, т.е. должна возвращать значение
<b>true</b>
или
<b>false</b>
. Метод
<b>filter()</b>
вызывает функцию точно так же, как методы
<b>forEach()</b>
и
<b>map()</b>
. Если возвращается
<b>true</b>
или значение, которое может быть преобразовано в
<b>true</b>
, переданный функции элемент считается членом подмножества и добавляется в массив, возвращаемый методом. Например:

<b>а = [5, 4, 3, 2, 1];</b>

<b>smallvalues = a.filter(function(x) { return х &lt; 3 }); // [2, 1]</b>

<b>everyother = a.filter(function(x,і) { return і%2==0 }); // [5, 3, 1]</b>

Обратите внимание, что метод

<b>filter()</b>
пропускает отсутствующие элементы в разреженных массивах и всегда возвращает плотные массивы. Чтобы уплотнить разреженный массив, можно выполнить следующие действия:

<b>var dense = sparse.filter(function() { return true; });</b>

А чтобы уплотнить массив и удалить из него все элементы со значениями undefined и null, можно использовать метод

<b>filter()</b>
, как показано ниже:

<b>а = a.filter(function(x) { return х !== undefined &amp;&amp; х != null; });</b>

7.9.4. Методы every() и some()

Методы

<b>every()</b>
и
<b>some()</b>
являются предикатами массива: они применяют указанную функцию-предикат к элементам массива и возвращают
<b>true</b>
или
<b>false</b>
. Метод
<b>every()</b>
напоминает математический квантор всеобщности V: он возвращает
<b>true</b>
, только если переданная вами функция-предикат вернула
<b>true</b>
для всех элементов массива:

<b>а = [1,2,3,4,5];</b>

<b>a.every(function(x) { return х &lt; 10; }) // =&gt; true: все значения &lt; 10.</b>

<b>a.every(function(x) { return х % 2 === 0; }) // =&gt; false: не все четные.</b>

Метод

<b>some()</b>
напоминает математический квантор существования 3: он возвращает
<b>true</b>
, если в массиве имеется хотя бы один элемент, для которого функция-предикат вернет
<b>true</b>
, а значение
<b>false</b>
возвращается методом, только если функция-предикат вернет
<b>false</b>
для всех элементов массива: