Массивы делятся на встроенные (document.links[], document.images[] и т.п. - их еще называют коллекциями ) и определяемые пользователем (автором документа). Коллекции будут обсуждаться в следующей лекции. Здесь же мы подробно остановимся на массивах, определяемых пользователем. Для массивов определено несколько методов:join(), reverse(), sort() и другие, а также свойство length, которое позволяет получить число элементов массива.
Для определения массива пользователя существует специальный конструкторArray. Если ему передается единственный аргумент, причем целое неотрицательное число, то создается незаполненный массив соответствующей длины. Если же передается один аргумент, не являющийся числом, либо более одного аргумента, то создается массив, заполненный этими элементами:
a = new Array();// пустой массив (длины 0) b = new Array(10);// массив длины 10 c = new Array(10,'Привет');// массив из двух элементов: числа и строки d = [5, 'Тест', 2.71828, 'Число e'];// краткий способ создать массив из 4 элементов
Элементы массива нумеруются с нуля. Поэтому в последнем примере значениеd[0] равно 5, а значение d[1] равно 'Тест'. Как видим, массив может состоять из разнородных элементов. Массивы не могут быть многомерными, однако ничто не мешает завести массив, элементами которого будут тоже массивы.
Метод join()
Метод join() позволяет объединить элементы массива в одну строку. Он является обратным к методу split(), который разрезает объект типа String на куски и составляет из них массив. Кстати, метод split() демонстрирует тот факт, что массив можно получить и без конструктора массива.
Рассмотрим пример преобразования локального URL в глобальный URL, где в качестве адреса сервера будет выступать www.intuit.ru. Пусть в переменнойlocalURL хранится локальный URL некоторого файла:
Наконец, склеиваем полученный массив, вставляя косую черту в местах склейки: globalURL = b.join("/"). В итоге мы получаем требуемый глобальный URL - значение globalURL будет равно:http://www.intuit.ru/department/internet/js/2/2.html.
Метод reverse()
Метод reverse() применяется для изменения порядка элементов массива на противоположный. Предположим, массив упорядочен следующим образом:
a = new Array('мать','видит','дочь');
Упорядочим его в обратном порядке, вызвав метод a.reverse(). Тогда новый массив a будет содержать:
a[0]='дочь';a[1]='видит';a[2]='мать';
Метод sort()
Метод sort() интерпретирует элементы массива как строковые литералы и сортирует массив в алфавитном (т.н. лексикографическом) порядке. Обратите внимание: метод sort() меняет массив. В предыдущем примере, применивa.sort(), мы получим на выходе:
a[0]='видит';a[1]='дочь';a[2]='мать';
Однако, это неудобно, если требуется отсортировать числа, поскольку согласно алфавитному порядку 40 идет раньше чем 5. Для этих целей у метода sort()имеется необязательный аргумент, являющийся именем функции, согласно которой требуется отсортировать массив, т.е. в этом случае вызов метода имеет вид: a.sort(myfunction). Эта функция должна удовлетворять определенным требованиям:
у нее должно быть ровно два аргумента;
функция должна возвращать число;
если первый аргумент функции должен считаться меньшим (большим, равным) чем второй аргумент, то функция должна возвратить отрицательное (положительное, ноль) значение.
Например, если нам требуется сортировать числа, то мы можем описать следующую функцию:
function compar(a,b){ if(a < b) return -1; if(a > b) return 1; if(a == b) return 0;}
Теперь, если у нас есть массив b = new Array(10,6,300,25,18);, то можно сравнить результаты сортировки без аргумента и с функцией compar в качестве аргумента:
Обратите внимание: метод sort() интерпретирует элементы массива как строки (и производит лексикографическую сортировку), но не преобразует их в строки. Если в массиве были числа, то они числами и останутся. В этом легко убедиться, если в конце последнего примера выполнить командуdocument.write(b[3]+1): результат будет 26 (т.е. 25+1 ), а не 251 (т.е. "25"+1).