Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
JavaScript_основы.doc
Скачиваний:
9
Добавлен:
04.11.2018
Размер:
322.05 Кб
Скачать

3.15.5. Класс Array. Работа с массивами и их сортировка

Класс Array позволяет создавать массивы как объекты и предоставляет доступ к множеству методов для обработки массивов. Экземпляр класса можно создать следующими способами:

Экземпляр класса> = new Array ([<Количество элементов массива>]);

Экземпляр класса> = new Array (Олементы массива через запятую>);

Если в круглых скобках нет никаких параметров, то создается массив нулевой длины, то есть массив, не содержащий элементов. Если указано одно число, то это число задает количество элементов массива. Если указано не­сколько элементов через запятую или единственное значение не является числом, то указанные значения записываются в создаваемый массив.

Обращение к элементам массива осуществляется с помощью квадратных скобок, в которых указывается индекс элемента. Индексация элементов мас­сива начинается с нуля:

m_Mass = new Array("Один", "Два", "Три");

document.write(m_Mass[0]); // "Один"

m_Mass[3] = 4; // Создание нового элемента массива

Свойство length возвращает количество элементов массива:

m_Mass = new Array("Один", "Два", "Три");

document.write(m_Mass.length + "<BR>"); // 3

for (i=0; i<m_Mass.length; i++) {

document.write(m_Mass[i] + "<BR>");

// Выводим все элементы массива по одному на строку

}

Большое количество методов обеспечивают удобную работу с массивами:

push(<Список элементов>) добавляет в массив элементы, указанные в списке элементов. Элементы добавляются в конец массива. Метод воз­вращает новую длину массива:

m_Mass = new Array("Один", "Два", "Три");

document.write(m_Mass.push("Четвертый", "Пятый")); // 5

// "Один", "Два", "Три", "Четвертый", "Пятый"

unshift(<Список элементов>) добавляет в массив элементы, указанные списке элементов. Элементы добавляются в начало массива:

m_Mass = new Array("Один", "Два", "Три");

m_Mass.unshift("Четвертый", "Пятый");

// "Четвертый", "Пятый", "Один", "Два", "Три"

concat(<Список элементов>) возвращает массив, полученный в результате объединения текущего массива и списка элементов. При этом в текущий массив элементы из списка не добавляются:

m_Mass = new Array("Один", "Два", "Три");

m_Mass2 = new Array();

m_Mass2 = m_Mass.concat("Четвертый", "Пятый");

document.write(m_Mass2[4]); // "Пятый"

// m_Mass содержит "Один", "Два", "Три"

// m_Mass2 содержит "Один", "Два", "Три", "Четвертый", "Пятый"

join(<Разделитель>) возвращает строку, полученную в результате объединения всех элементов массива через разделитель:

m_Mass = new Array("Один", "Два", "Три");

var m_Str = m_Mass.join(" - ");

document.write(m_Str); // "Один – Два - Три"

shift() удаляет первый элемент массива и возвращает его:

m_Mass = new Array("Один", "Два", "Три");

document.write(m_Mass.shift()); // "Один"

document.write(m_Mass.join(", ")); // "Два, Три"

pop() удаляет последний элемент массива и возвращает его:

m_Mass = new Array("Один", "Два", "Три");

document.write(m_Mass.pop()); // "Три"

document.write(m_Mass.join(", ")); // "Один, Два"

sort ([Функция сортировки]) выполняет сортировку массива. Если функция не указана, будет выполнена обычная сортировка (числа сортируются возрастанию, а символы — по алфавиту):

m_Mass = new Array("Один", "Два", "Три");

m_Mass.sort();

document.write(m_Mass.join(", ")); // "Два, Один, Три"

Если нужно изменить стандартный порядок сортировки, это можно сде­лать с помощью функции сортировки. Функция принимает две перемен­ные и должна возвращать:

  • 1 — если первый больше второго;

  • -1 — если второй больше первого;

  • о — если элементы равны.

Например, стандартная сортировка зависит от регистра символов:

m_Mass = new Array("единица1", "Единый", "Единица2");

m_Mass.sort();

document.write(m_Mass.join(", ")); // "Единица2, Единый, единица1"

В результате мы получим неправильную сортировку, ведь "Единица2" и "Единый" должны стоять позже "единица!". Изменим стандартную сор­тировку на свою сортировку без учета регистра (листинг 3.25).

Листинг 3.25. Сортировка без учета регистра

function f_sort(m_Str1, m_Str2) { // Сортировка без учета регистра

m_Str1_1 = new String(m_Str1);

m_Str2_1 = new String(m_Str2);

m_Str1_1 = m_Str1_1.toLowerCase(); // Преобразуем к нижнему регистру

m_Str2_1 = m_Str2_1.toLowerCase(); // Преобразуем к нижнему регистру

if (m_Str1_1>m_Str2_1) return 1;

if (m_Str1_1<m_Str2_1) return -1;

return 0;

}

m_Mass = new Array("единица1", "Единый", "Единица2");

m_Mass.sort(f_sort); // Имя функции указывается без скобок

document.write(m_Mass.join(", ")); // "единица1, Единица2, Единый"

Для этого две переменные приводим к одному регистру, а затем произво­дим стандартное сравнение. Обратите внимание, что мы не изменяем ре­гистр самих элементов массива, так как работаем с их копиями.

Порядок сортировки можно изменить на противоположный (листинг 3.26), изменив возвращаемые функцией значения.

Листинг 3.26. Сортировка без учета регистра в обратном порядке

function f_sort(m_Str1, m_Str2) {

// Сортировка без учета регистра в обратном порядке

m_Str1_1 = new String(m_Str1);

m_Str2_1 = new String(m_Str2);

m_Str1_1 = m_Str1_1.toLowerCase(); // Преобразуем к нижнему регистру

m_Str2_1 = m_Str2_1.toLowerCase(); // Преобразуем к нижнему регистру

if (m_Str1_1>m_Str2_1) return -1;

if (m_Str1_1<m_Str2_1) return 1;

return 0;

}

m_Mass = new Array("единица1", "Единица2", "Единый");

m_Mass.sort(f_sort);

document.write(m_Mass.join(", ")); // "Единый, Единица2, единица1"

reverse () возвращает массив, элементы которого следуют в обратно: порядке относительно исходного массива. Метод reverse () переворачивает массив, а не сортирует элементы в обратном порядке;

m_Mass = new Array("Один", "Два", "Три");

m_Mass2 = new Array();

m_Mass2 = m_Mass.reverse();

document.write(m_Mass2.join(", ")); // "Три, Два, Один"

document.write(m_Mass.join(", ")); // "Три, Два, Один"

tostring() и valueOf() преобразуют массив в строку. Элементы указы ваются через запятую без пробела:

m_Mass = new Array("Один", "Два", "Три");

document.write(m_Mass.toString()); // "Один,Два,Три"

m_Mass = new Array("Один", "Два", "Три");

document.write(m_Mass.valueOf()); // "Один,Два,Три"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]