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

Стандарт ECMAScript 5 определяет множество новых методов, позволяющих выполнять итерации по элементам массивов в порядке возрастания индексов и передавать их функции, определяемой пользователем. Наиболее типичным представителем этих методов является метод

<b>forEach()</b>
:

<b>var data = [1,2,3,4,5]; // Этот массив требуется обойти</b>

<b>var sumOfSquares =0; // Требуется вычислить сумму квадратов элементов</b>

<b>data.forEach(function(x){ // Передать каждый элемент этой функции</b>

<b>   sumOfSquares += х*х; // прибавить квадрат к сумме</b>

<b>});</b>

<b>sumOfSquares // =&gt;55 : 1+4+9+16+25</b>

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

7.7. Многомерные массивы

JavaScript не поддерживает «настоящие» многомерные массивы, но позволяет неплохо имитировать их при помощи массивов из массивов. Для доступа к элементу данных в массиве массивов достаточно дважды использовать оператор

<b>[]</b>
. Например, предположим, что переменная
<b>matrix</b>
- это массив массивов чисел. Каждый элемент
<b>matrix[x]</b>
- это массив чисел. Для доступа к определенному числу в массиве можно использовать выражение
<b>matrix[x][y]</b>
. Ниже приводится конкретный пример, где двумерный массив используется в качестве таблицы умножения:

<b>// Создать многомерный массив</b>

<b>var table = new Array(10); // В таблице 10 строк</b>

<b>for(var і = 0; і &lt; table.length; i++)</b>

<b>  table[i] = new Array(10); // В каждой строке 10 столбцов</b>

<b>// Инициализировать массив</b>

<b>for(var row = 0; row &lt; table.length; row++) {</b>

<b>  for(col = 0; col &lt; table[row].length; col++) {</b>

<b>    table[row][col] = row*col;</b>

<b>  }</b>

<b>}</b>

<b>// Расчет произведения 5*7 с помощью многомерного массива </b>

<b>var product = table[5][7]; // 35</b>

7.8. Методы класса Array

Стандарт ECMAScript 3 определяет в составе

<b>Array.prototype</b>
множество удобных функций для работы с массивами, которые доступны как методы любого массива. Эти методы будут представлены в следующих подразделах. Более полную информацию можно найти в разделе
<b>Array</b>
в справочной части по базовому языку JavaScript. Стандарт ECMAScript 5 определяет дополнительные методы для выполнения итераций по массивам - эти методы рассматриваются в разделе 7.9.

7.8.1. Метод join()

Метод

<b>Array.join()</b>
преобразует все элементы массива в строки, объединяет их и возвращает получившуюся строку. В необязательном аргументе методу можно передать строку, которая будет использоваться для отделения элементов в строке результата. Если строка-разделитель не указана, используется запятая. Например, следующий фрагмент дает в результате строку «1,2,3»:

<b>var а = [1, 2, 3]; // Создать новый массив с указанными тремя элементами</b>

<b>a.join(); // =&gt; &quot;1,2,3&quot;</b>

<b>a.join(&quot; &quot;); // =&gt; &quot;1 2 З&quot;</b>

<b>a. join(&quot;&quot;); // =&gt; &quot;123&quot;</b>

<b>var b = new Аггау(10); // Массив с длиной, равной 10, и без элементов</b>

<b>b. join(&quot;-') // =&gt; &quot;---------&quot; строка из 9 дефисов</b>

Метод

<b>Array.join()</b>
является обратным по отношению к методу
<b>String.split()</b>
, создающему массив путем разбиения строки на фрагменты.

7.8.2. Метод reverse()

Метод

<b>Array.reverse()</b>
меняет порядок следования элементов в массиве на обратный и возвращает переупорядоченный массив. Перестановка выполняется непосредственно в исходном массиве, т. е. этот метод не создает новый массив с переупорядоченными элементами, а переупорядочивает их в уже существующем массиве. Например, следующий фрагмент, где используются методы
<b>reverse()</b>
и
<b>join(),</b>
дает в результате строку "3,2,1":

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

<b>a.reverse().join(); // =&gt; &quot;3,2,1”: теперь а = [3,2,1]</b>

7.8.3. Метод sort()

Метод

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

<b>var а = new Array(&quot;banana&quot;, &quot;cherry&quot;, &quot;apple&quot;);</b>

<b>a.sort();</b>

<b>var s = a.join(&quot;, ”); // s == &quot;apple, banana, cherry&quot;</b>

Неопределенные элементы переносятся в конец массива.

Для сортировки в каком-либо ином порядке, отличном от алфавитного, методу

<b>sort()</b>
можно передать функцию сравнения в качестве аргумента. Эта функция устанавливает, какой из двух ее аргументов должен следовать раньше в отсортированном списке. Если первый аргумент должен предшествовать второму, функция сравнения должна возвращать отрицательное число. Если первый аргумент должен следовать за вторым в отсортированном массиве, то функция должна возвращать число больше нуля. А если два значения эквивалентны (т. е. порядок их следования не важен), функция сравнения должна возвращать 0. Поэтому, например, для сортировки элементов массива в числовом порядке можно сделать следующее: