HTML, Excel, Word, SEOОсновы JavaScript ⇒ Массивы

ОСНОВЫ JavaScript

Учебник JavaScript
·Знакомство с JS. Переменные, операторы, операции
·Функции
·Модель HTML документа
·Иерархия документов в бразуере
·Формы
·Окна и фреймы
·Ссылки, заголовок, статус
·События
·События клавиатуры и мыши
·События. Таймер
·Стили. Управление стилями
·Слои и блоки. Управление видимостью
·Объекты JS
·Внешние объекты
·Внутренние объекты
·Массивы
·Регулярные выражения
·Математика в JS
·Пример простого калькулятора
·Дата и время
·Cookies и хранение состояния
·Немного об AJAX
·Работа с WebMoney



Массивы


Автор: Артемьев Сергей Игоревич ICQ: 438856621 email: _spin_@bk.ru

Как и большинство языков программирования, JavaScript предоставляет средство для работы с формализованными данными большого объема - массивы. Массив - это список переменных, к каждой из которых можно получить доступ по её номеру. Массив создаётся следующим образом:

// создание пустого массива

// задание значений первых двух элементов
var myArray = new Array()
myArray[0] = 'Москва'
myArray[1] = 'Хабаровск'


// создание нового массива
// и резервирование места для 
// 100 переменных

var myArray = new Array(100)


// создание нового массива
// и явная инициализация первого элемента
var myArray = new Array('Элемент');


// косвенное создание массива 
// из двух элменетов

var myArray = ['первый элемент', 'второй элемент']

Все массивы, независимо от способа создания, представляют собой экземпляры класса (объекта) Array. Добавление элементов производится простой инициализацией соответствующего элемента.

var myArray = new Array()

myArray[0] = 'Питер'

Массивы в JavaScript не обязательно должны быть "сплошными", т.е. содержать все элементы. При необходимости можно создавать так называемые "разреженные" массивы:

var myArray = new Array();
myArray[0] = 'Питер'
// пропустим myArray[1]
myArray[2] = 'Гомель'
// пропустим myArray[3]
myArray[4] = 'Рязань'
myArray[5] = 'Псков'

for(i = 0; i < 6; i++)
  alert(myArray[i])

Этот код создаёт массив и заполняет только необходимые элементы. Теперь если мы попробуем получить значение не инициализированного элемента (в примере это первый и третий), то получим "undefined". Использование разреженных массивов иногда очень удобно, но требует опыта и внимательности, поэтому на начальном этапе лучше от них отказаться. Кроме того, разреженные массивы не дают выгоды по использованию памяти, т.к. место резервируется для всех элементов, в том числе не инициализированных.

Элементами массива могут быть переменные любого типа. Интересная особенность JavaScript - массив может одновременно содержать элементы различных типов, в том числе массивы:

//
// массив с элементами разных типов
//
var myArrayS = new Array();
myArrayS[0] = 'Ярославль';
myArrayS[1] = 10000;
myArrayS[2] = 'Ямал';
myArrayS[3] = 5000;

for(i = 0; i < myArrayS.length; i += 2)
	alert('Город: ' + myArrayS[i] + '\n' + 
    	  'Население: ' + myArrayS[i + 1] + '\n')

//
// массив с элементами-массивами
//
var myArrayA = new Array()
myArrayA[0] = new Array('Ярославль', 10000);
myArrayA[1] = new Array('Ставрополь', 5000);

for(i = 0; i < myArrayA.length; i++)
	alert('Город: ' + myArrayA[i][0] + '\n' + 
    	  'Население: ' + myArrayA[i][1] + '\n')

		

Класс Array содержит единственное свойство - length, позволяющее узнать текущую длину массива:

 
var myArray = new Array();

...
// узнать колиекчтво элементов
alert(myArray.length)

// добавить эдемент последним
myArray[myArray.length] = 'последнее значение'

Обратите внимание, что значение Array.length на единицу больше номера последнего элемента массива, т.к. нумерация в массиве начинается с нуля, а свойство length показывает общее количество элементов.

Класс Array так же содержит ряд методов, существенно упрощающих некоторые рутинные операции с массивами:

Array.join() Получение списка элементов массива в виде одной строки без разделителей.
Array.join(разделитель) Получение списка элементов массива в виде одной строки, причем элементы массива разделены строкой "разделитель"
Array.reverse() Изменение порядка сортировки массива. Этот метод "переворачитвает" массив: первый элемент становится последним и наоборот.
Array.sort() Сортировка массива по алфавиту. Если массив содержит числовые данные, то при сортировке используются их строковые представления.
Array.sort(функция_сортировки) Сортировка массива по пользовательскому критерию, который задаётся с помощью собственной функции сортировки:

Рассмотрим небольшой пример:

// функция сортировки массива
function sortByLength(a, b)
{
		if(a.length > b.length) return 1;
		else
			if(a.length = b.length) return 0;
			else return -1;
}

// инициализация массива
var myArray = new Array()
myArray[0] = 'Ярославль'
myArray[1] = 'Ямал'
myArray[2] = 'Ставрополь'
myArray[3] = 'Омск'
myArray[4] = 'Анапа'

alert('исходный массив:\n\n' + myArray.join('\n'))

// сортируем по алфавиту
myArray.sort();
alert('сортированный по алфавиту:\n\n' + myArray.join('\n'))

// сортируем в обратном порядке		
myArray.reverse();
alert('перевёрнутый:\n\n' + myArray.join('\n'))

// сортируем по длине с помощью собственной функции		
myArray.sort(sortByLength);
alert('сортированный по длине:\n\n' + myArray.join('\n'))

Как видите, пользоваться методами массива очень просто. Самое интересное в этом примере - функция сортировки. Она должна всегда иметь два параметра и возвращать число. Порядок сортировки определяется знаком возвращаемого числа. Если число отрицательное - первый аргумент должен в массиве располагаться раньше второго, если положительное - позже. Если элементы равны, то обычно возвращается ноль, а порядок элементов не изменяется.

В JavaScript1.1 и выше реализованы дополнительные свойства и методы массивов, расширяющие возможности для программистов. Например, добавлены методы concat() и slice(), позволяющие собъединить массивы и получить кусок массива соответственно. К сожалению, ещё не все браузеры поддерживают JavaScript1.1 и JavaScript1.2, поэтому при разработке кроссбраузерных скриптов использовать новые нестандартные свойства и методы надо очень аккуратно.

Таким образом, массивы - это один из наиболее гибких и удобных механизмов JavaScript, т.к. позволяет с лёгкостью манипулировать даже относительно большими объемами данных. Массивы надо использовать везде, где заранее неизвестно количество хранимых данных и их тип.

С другой стороны, увлекаться и делать массивы из одного-двух элементов тоже не стоит. Перед созданием массива подумайте, а точно ли он нужен? Как показывает практика - в половине случаев проще обойтись двумя лишними переменными.



В начало страницы



В начало страницы