Мониста все записи автора
8.2. Объект Array (Массив)
Массив представляет собой упорядоченный набор данных. Его удобно представить себе в виде одностолбцовой таблицы, содержащей некоторое количество строк. В ячейках такой таблицы могут находиться данные любого типа, в том числе и массивы. В последнем случае можно говорить о многомерных массивах (то есть о массивах массивов). Количество элементов в массиве (строк в таблице) называется длиной массива. К элементам массива можно обращаться в программе по их порядковому номеру (индексу). Нумерация элементов массива начинается с нуля, так что первый элемент имеет индекс 0, а последний — на единицу меньший, чем длина массива.
Массивы применяются во многих более или менее сложных программах обработки данных, а в некоторых случаях без них просто не обойтись. Если среди используемых данных есть группы таких, которые обрабатываются одинаковым образом, то, возможно, лучше организовать их в виде массива.
Создание массива
Существует несколько способов создания массива. В любом случае прежде всего создается новый объект массива с использованием ключевого слова new:
имя_массива = new Array([длина_массива])
Здесь длина_массива является необязательным числовым параметром, о чем говорят квадратные скобки. Если длина массива не указана, то создается пустой массив, не содержащий ни одного элемента. В противном случае создается массив с указанным количеством элементов, однако все они имеют значение null (то есть не имеют значений). Вы можете сначала создать пустой массив, а затем добавить к нему нужное количество элементов с помощью оператора присваивания. Заметим, что выражение с ключевыми словами new Array создает экземпляр (копию) объекта Array. У объекта Array имеется свойство length, значением которого является длина массива. Чтобы получить значение этого свойства, необходимо использовать выражение имя_массива.length. Создав массив, можно присвоить значения его элементам, используя для этого оператор присваивания. В левой части оператора присваивания указывается имя массива, а рядом с ним в квадратных скобках индекс элемента. Мы уже говорили, что к элементам массива обращаются по индексу: имя_массива[индекс]. Здесь квадратные скобки обязательны.
Рассмотрим создание массива earth, содержащего в качестве элементов некоторые характеристики нашей планеты. Обратите внимание, что элементы в этом массиве различных типов (строковые и числовые).
earth = new Array(4) // массив из 4-х элементов
earth[0] = "Планета"
earth[1] = "24 часа"
earth[2] = 6378
earth[3] = 365.25
earth.length // значение равно 4
Если нам потребуется значение, например, третьего элемента массива, то достаточно использовать выражение earth[2].
Другой способ создания массива заключается в непосредственном определении элементов в круглых скобках за ключевым словом Array. Например,
earth = new Array("Планета", "24 часа", 6378, 365.25)
JavaScript автоматически создает индексы для элементов массива, так что к элементам массива, созданного таким способом, также можно обращаться по индексам.
Третий способ создания массива — присвоить имя каждому элементу, подобно имени свойства объекта. Например,
earth = new Array() // пустой массив
earth.xtype = "Планета"
earth.xday = "24 часа"
earth.radius = 6378
earth.period = 365.25
В этом случае обращение к элементу происходит как к свойству объекта, например, earth.radius. Возможен и такой вариант: earth["radius"]. Однако по индексу к элементам в таком массиве обращаться нельзя.
Многомерные массивы
Массивы, рассмотренные выше, являются одномерными. Их можно представить себе в виде таблицы из одного столбца. Однако элементы массива могут содержать данные различных типов, в том числе и объекты, а значит и массивы. Если в качестве элементов некоторого одномерного массива создать массивы, то получится двумерный массив. Обращение к элементам такого массива происходит в соответствии со следующим синтаксисом:
имя_массива[индекс_уровня1] [индекс_уровня2]
Если массив имеет размерность большую двух, то синтаксис обращения к массивам имеет аналогичный синтаксис: следует добавить нужное количество квадратных скобок, заключающих нужные индексы.
Типичным примером двумерного массива является массив опций меню. У такого меню есть горизонтальная панель с опциями, называемая главным меню. Некоторым опциям главного меню соответствуют раскрывающиеся вертикальные подменю со своими опциями. Мы создаем массив, длина которого равна количеству опций главного меню. Элементы этого массива определяем как массивы названий опций соответствующих подменю. Чтобы была ясна структура нашей конструкции, мы выбрали названия опций надлежащим образом. Например, "Меню 2.1" — название 1-й опции подменю, соответствующего 2-й опции главного меню.
menu = new Array()
menu[0] = new array("Меню 1.1", "Меню 1.2", ", "Меню 1.3")
menu[1] = new array("Меню 2.1", "Меню 2.2")
menu[2] = new array("Меню 3.1", "Меню 3.2" , "Меню 3.3", "Меню 3.4")
Чтобы обратиться ко 2-й опции 3-го подменю, следует написать:
menu[2][1] // значение равно "Меню 3.2"
Усложним нашу конструкцию, чтобы она содержала не только названия опций подменю, но и названия опций главного меню.
menu = new Array()
/* Массив опций главного меню: */
menu[0] = new Array("Меню1", "Меню2", "Меню3")
menu[1] = new Array()
menu[1][0] = new Array("Меню 1.1", "Меню 1.2", "Меню 1.3")
menu[1][1] = new Array("Меню 2.1", "Меню 2.2")
menu[1][2] = new Array("Меню 3.1", "Меню 3.2" , "Меню3.3", "Меню 3.4")
menu[0][1] // значение равно "Меню 2"
menu[0][2] // значение равно "Меню 3"
menu[1][1][0] // значение равно "Меню 2.1"
menu[1][2][3] // значение равно "Меню 3.2"
Копирование массива
Иногда требуется создать копию массива, чтобы сохранить исходные данные и предохранить их от последующих модификаций. Например, метод сортировки элементов массива, который рассмотрен ниже, изменяет исходный массив. Однако для копирования массива не достаточно присвоить его другой переменной. Используя новую переменную и оператор присваивания, мы создаем лишь новую ссылку на прежний массив, а не новый массив.
Пример:
a = new Array(5, 2, 4, 3)
x = a // ссылка на массив a
a[2] = 25 // изменение значение элемента с индексом 2
x[2] // значение равно 25, то есть новому значению a[2]
В этом примере массивы a и x совпадают.
Чтобы скопировать массив, то есть создать новый массив, элементы которого равны соответствующим элементам исходного, следует воспользоваться оператором цикла, в котором элементам нового массива присваиваются значения элементов исходного, например:
a = new Array(5, 2, 4, 3)
x = new Array() // ссылка на массив a
for(i=0; i< a.length; i++) // копирование значений массива a в элементы массива x
{x[i] = a [i]}
Свойства Array
length — длина или, иными словами, количество элементов в массиве; целое число.
Синтаксис: имя_массива.length
Поскольку индексация элементов массива начинается с нуля, индекс последнего элемента на единицу меньше длины массива. Это обстоятельство удобно использовать при добавлении к массиву нового элемента: myarray[mayarray.length] = значение.
prototype — свойство (прототип), позволяющее добавить новые свойства и методы ко всем созданным массивам. Например, следующее выражение добавляет свойство author ко всем уже созданным массивам:
Array.prototype.author = "Иванов"
Если теперь вместо Array.prototype написать имя существующего массива, то можно изменить значение свойства author только для этого массива:
myarray = new Array() // создание массива myarray
xarray = new Array() // создание массива xarray
Array.prototype.author = "Иванов" /* добавление прототипа ко всем массивам */
myarray.author = "Иванов младший" /* изменение свойства author для myarray */
xarray.author = "Сидоров" /* изменение свойства author для xarray */
Прототипу можно присвоить функции. При этом они пополнят множество методов объекта Array.