В JavaScript многомерные массивы представляют собой массивы из массивов. Для получения доступа к элементу, скажем, двумерного массива, следует дважды указать оператор .
Предположим, что переменная matrix представляет собой массив массивов целых чисел. Каждый из элементов matrix[j] представляет собой массив чисел. Для обращения к отдельному числу используем запись: matrix[j][k].
Пример. Используем для создания таблицы умножения двухмерный массив.
var matrix = new Array(10); // в матрице 10 строчек
for(var j = 0; j < matrix.length; j++)
matrix [j] = new Array(10); //d каждой строчке создали 10 столбцов
for(var row = 0; row < matrix.length; row++) {
for(col = 0; col < matrix .length; col++) {
matrix = row*col; // заполнение элементов массива
var rezult = matrix ; // результат умножения 24
Типичное использование двухмерного массива в JavaScript - создание массива опций пользовательского меню. Скажем, некоторым из опций главного меню соответствуют опции раскрывающегося подменю. Создадим массив, у которого длина соответствует числу опций главного меню. Элементами этого массива будут массивы наименований опций соответствующих им подменю.
mеnu = nеw Аrrаy();
mеnu = nеw Аrrаy ("Опция 1.1", " Опция 1.2", ", " Опция 1.3");
mеnu = nеw Аrrаy ("Опция 2.1", " Опция 2 . 2 ");
mеnu = nеw Аrrаy("Опция 3.1", "Опция 3.2", "Опция 3.3", "Опция 3.4");
Для обращения к 1-й опции 2-го подменю, нужно написать:
menu // значение равно "Опция 2.1";
Изменим конструкцию массива, чтобы он содержал и названия опций главного меню, и опций подменю:
mеnu = nеw Аrrау()
menu = nеw Аrrау ("Меню1", "Меню2", "МенюЗ");
menu = nеw Аrrау ();
menu = nеw Аrrау ("Опция 1.1". " Опция 1.2", " Опция 1.3");
menu = nеw Аrrау ("Опция 2.1", " Опция 2 . 2 ");
menu = nеw Аrrау ("Опция 3.1", " Опция 3 . 2 " , " Опция З.3", " Опция 3.4");
menu // значение равно "Меню2"
menu // значение равно "Меню3"
menu // значение равно " Опция 2.1"
menu // значение равно " Опция 3.2 "
Методы работы с массивами
В данном разделе рассмотрим методы, с помощью которых можно манипулировать элементами массивов.
join() – метод, преобразующий каждый из элементов массива в строку и объединяющий их. В качестве аргумента метода можно указывать необязательную строку, предназначенную для разделения отдельных элементов в итоговой строке. Если разделителя не указать, то для разделения по умолчанию используется запятая.
var arr = ; // задан массив из трех элементов
var str = arr.join(); // значение str равно "12,23,38"
str = arr.join("; "); // str == "12; 23; 38"
Как уже отмечалось ранее, метод Array.join() является обратным по отношению к строковому методу String.split(), разбивающему строки на элементы массива.
reverse() – метод, изменяющий порядок расположения элементов в массиве на противоположный. Данный метод не создает нового массива, а изменяет их порядок в исходном массиве.
var arr = nеw Аrrау (1,2,3); // arr = 1, arr = 2, arr = 3
arr.reverse(); // arr = 3, arr = 2,arr = 1
var str = arr.jоin(); // str == "3,2,1"
sort() – метод, сортирующий элементы массива на месте и возвращающий отсортированный массив. Если метод sort() вызывать без указания аргументов, он будет осуществлять сортировку элементов массива по алфавиту, для выполнения сравнения при необходимости преобразуя их временно в строковые значения.
var arr = nеw Аrrаy("bаnаnа", "сhеrrу", "аррlе");
var str = arr.join(", "); // str == " аррlе, bаnаnа, сhеrrу"
Если в составе массива имеется неопределенный элемент, он переносится в конец массива.
Для того, чтобы осуществить сортировку не в алфавитном порядке, а каком-то другом, передают методу sort() как аргумент функцию сравнения, задача которой является указания правила, по которому один из двух ее аргументов будет в отсортированном списке располагаться раньше. Если второму должен предшествовать первый аргумент, функция сравнения должна возвращать отрицательное значение. Если в отсортированном массиве первый аргумент должен следовать за вторым, то функция должна возвращать положительное число. Функция сравнения должна возвращать 0, если два значения являются эквивалентными, то есть их порядок не важен. Пример.
Произведем сортировку в числовом порядке.
var arr = ;
arr.sort(); // в алфавитном порядке: 11111, 2222, 333, 44
arr.sort(function(first,second) { //
return first - second; }); // Числовой порядок: 44, 333, 2222, 11111
В этом фрагменте кода удобно использовать функциональный литерал, так как функция сравнения будет вызываться один раз и нет необходимости присваивать ей имя.
Определяя другие функции сортировки, можно осуществлять самые разнообразные способы сортировки.
concat() – метод, создающий и возвращающий новый массив, в котором содержатся элементы исходного массива, дополненные значениями всех аргументов, указанных в методе concat(). В том случае, когда аргумент сам представляет собой массив, в итоговый массив добавятся его элементы. Но, следует обратить внимание, что рекурсии при разделении массивов из массивов не осуществляется.
var arr = ;
arr.соncаt(4, 5) // результат
arr. соncаt (); // результат
arr. соncаt (,) // результат
arr. соncаt (4, ]) // результат ]
slice() – метод, возвращающий подмассив (фрагмент) исходного массива. У метода имеется два аргумента, которые указывают начало и конец возвращаемого подмассива. В возвращаемом массиве будут содержаться элементы, начиная с того, индекс которого указан первым аргументом, до того элемента, номер которого указан вторым аргументом, но не включая его.
Если указать единственный аргумент, в возвращаемом массиве будут содержаться элементы от позиции, определяемой аргументом, и до конца массива. Отрицательный аргумент указывает номер элемента массива с конца массива.
var arr = ;
arr.sliсе(0,3); // вернет
arr. sliсе (3); // вернет
arr. sliсе (1,-1); // вернет
arr. sliсе (-3,-2); // вернет
splice() - универсальный метод, который может быть использован и для добавления, и для удаления элементов массива, или для обеих операций одновременно. В результате работы метода исходный массив изменяется.
В методе splice() первый аргумент указывает индекс массива, с которого начнется удаление и/или вставка, второй аргумент указывает количество удаляемых элементов. Если опустить второй аргумент, то будут удалены элементы массива, начиная с позиции, указанной первым аргументом метода, и до конца массива. Возвращает метод splice() массив удаленных элементов. Если вторым аргументом будет значение 0, метод вернет пустой массив.
var arr = ;
arr.splice(4); // вернет ; arr станет равен
arr.splice(1,2); // вернет ; arr станет равен
После двух аргументов метода splice(), задающих подлежащие удалению элементы массива, могут следовать в любом количестве дополнительные аргументы, задающие вставляемые в массив элементы, начиная с индекса, заданного первым аргументом метода.
var arr = ;
arr.splice(2,0,"ab","cd"); /* вернет ; arr станет равен */
arr.splice(2,2,,3); /* вернет ["ab","cd"]; arr станет равен ,3,33,44,55] */
Следует учитывать тот факт, что метод splice() аргументы-массивы не разбивает на отдельные вставляемые элементы, а вставляет сам массив.
push() и pop() – методы, позволяющие использовать массивы как стеки. Метод push() добавляет в конец массива новые элементы и возвращает новую длину массива. Метод pop() удаляет последний элемент в массиве и возвращает в качестве результата работы удаленное значение.
Оба метода изменяют исходный массив. При использовании в коде комбинации методов push() и pop() в JavaScript можно с помощью массива создать стек с правилом обслуживания: «первым вошел – последним вышел».
vаr stасk = ; // пустой стек
stасk.push(1,2); // массив: вернет 2
stасk. рор (); // массив: вернет 2
stасk.push(3); // массив: вернет 2
stасk.рор(); // массив: вернет 3
stасk.push(); // массив: ] вернет 2
stасk. рор () // массив: вернет
stасk. рор (); // массив: вернет 1
unshift() и shift() – методы, работающие почти так же, как push() и pop(), но они вставка и удаление элементов осуществляется не в конце массива, а в начале.
Метод unshift() добавляет один или несколько элементов в начало массива, смещая элементы к концу массива, и возвращает новую длину массива. Метод shift() служит для удаления первого элемента массива, возвращает удаленный элемент.
var arr = ; // arr:
arr.unshift(1); // arr: вернет 1
arr.unshift(22); // arr: вернет 2
arr.shift(); // arr: вернет 22
arr.unshift(3,); // arr:,1] вернет 3
arr.shift(); // arr:[,1] вернет 3
arr.shift(); // arr: вернет
arr.shift(); // arr: вернет 1
При вызове метода unshift() с несколькими аргументами эти аргументы вставляются все сразу, а не по одному, как это происходит в методе splice(). То есть в итоговом массиве значения будут расположены в таком же порядке, в каком были записаны в списке аргументов при вызове метода.
toString() и toLocaleString() - методы, преобразующие каждый из элементов массива в строку и выводящие список полученных строк через запятую. Метод toString(), как уже отмечалось, имеется у любого объекта в JavaScript, и у массива в том числе. Обратите внимание, что в результате работы методов вокруг значений массива не остается ни квадратных скобок, ни каких-то других разделителей.
ToString() // вернет "1,2,3"
["а", "b", "с"].tоString() // вернет "а,b,c"
].tоString() // вернет "1,2,с"
Метод toString() вернет такую же строку, как и метод join() в случае его вызова без параметров.
toLocaleString() – метод, при котором итоговые строки конкатенируются с использованием разделителя, специфического для региона.
Пример 1. Создание циклического баннера (слайд-шоу).
Создадим массив изображений, которые будут появляться на странице через некоторые промежутки времени.
Slide = new Array("./pic/1.gif", "./pic/2.gif", "./pic/3.gif", "./pic/4.gif", "./pic/5.gif", "./pic/6.gif", "./pic/7.gif","./pic/8.gif", "./pic/9.gif");
//Изображения находятся во вложенной папке pic
k=0; Len=Slide.length;
function rotate(){
if (document.images){
document.banner.src=Slide[k];
setTimeout ("rotate()",1*1000);