Оглавление

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

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

 

Экземпляр класса можно создать следующими способами:
<Экземпляр класса> = new Array (<Количество элементов массива>); <Экземпляр класса> = new Array (<Элементы массива через запятую>);


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

 

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

  var Mass = new Array("Один", "Два", "Три");
  document.write(Mass[0]); // "Один"
  Mass[3] = 4; // Создание нового элемента массива
  document.write(Mass.join(", ")); // "Один, Два, Три, 4"


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

  var Mass = [ "Один", "Два", "Три" ];
  document.write(Mass.length + "<br>"); // 3
  for (var i=0, c=Mass.length; i<c; i++) {
     document.write(Mass[i] + "<br>");
     // Выводим все элементы массива по одному на строку
  }

Большое количество методов обеспечивают удобную работу с массивами:
push{<список з--ементов>) добавляет в массив элементы, указанные в списке элементов. Элементы добавляются в конец массива. Метод возвращает новую длину массива:

   var Mass = [ "Один", "Два", "Три" ];
   document.write(Mass.push("Четвертый", "Пятый")); // 5
   document.write(Mass.join(", "));
   // "Один, Два, Три, Четвертый, Пятый"

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

   var Mass = [ "Один", "Два", "Три" ];
   Mass.unshift("Четвертый", "Пятый");
   document.write(Mass.join(", "));
   // "Четвертый, Пятый, Один, Два, Три"

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

   var Mass = [ "Один", "Два", "Три" ];
   var Mass2 = []; // Пустой массив
   Mass2 = Mass.concat("Четвертый", "Пятый");
   document.write(Mass.join(", "));
   // "Один, Два, Три"
   document.write(Mass2.join(", "));
   // "Один, Два, Три, Четвертый, Пятый"

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

   var Mass = [ "Один", "Два", "Три" ];
   var Str = Mass.join(" - ");
   document.write(Str); // "Один – Два - Три"

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

   var Mass = [ "Один", "Два", "Три" ];
   document.write(Mass.shift()); // "Один"
   document.write(Mass.join(", ")); // "Два, Три"

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

var Mass = [ "Один", "Два", "Три" ];
document.write(Mass.pop()); // "Три"
document.write(Mass.join(", ")); // "Один, Два"

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

var Mass = [ "Один", "Два", "Три" ];
Mass.sort();
document.write(Mass.join(", ")); // "Два, Один, Три"

 

Если нужно изменить стандартный порядок сортировки, это можно сделать с помощью функции сортировки. Функция принимает две переменные и должна возвращать:
•   1 — если первый больше второго;
•  -1 — если второй больше первого;
•   0 — если элементы равны.

 

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

var Mass = [ "единица1", "Единый", "Единица2" ];
Mass.sort();
document.write(Mass.join(", ")); // "Единица2, Единый, единица1"


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

 

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

function f_sort(Str1, Str2) { // Сортировка без учета регистра
   var Str1_1 = Str1.toLowerCase(); // Преобразуем к нижнему регистру
   var Str2_1 = Str2.toLowerCase(); // Преобразуем к нижнему регистру
   if (Str1_1>Str2_1) return 1;
   if (Str1_1<Str2_1) return -1;
   return 0;
}

var Mass = [ "единица1", "Единый", "Единица2" ];
Mass.sort(f_sort); // Имя функции указывается без скобок
document.write(Mass.join(", ")); // "единица1, Единица2, Единый"

 

единица1, Единица2, Единый

 

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

 

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


function f_sort(Str1, Str2) { 
   // Сортировка без учета регистра в обратном порядке
   var Str1_1 = Str1.toLowerCase(); // Преобразуем к нижнему регистру
   var Str2_1 = Str2.toLowerCase(); // Преобразуем к нижнему регистру
   if (Str1_1>Str2_1) return -1;
   if (Str1_1<Str2_1) return 1;
   return 0;
}

var Mass = [ "единица1", "Единица2", "Единый" ];
Mass.sort(f_sort);
document.write(Mass.join(", ")); // "Единый, Единица2, единица1"

 

Единый, Единица2, единица1

 

reverse () переворачивает массив. Элементы будут следовать в обратном порядке относительно исходного массива:

var Mass = [ "Один", "Два", "Три" ];
Mass.reverse();
document.write(Mass.join(", ")); // "Три, Два, Один"

slice (<начало>, [<конец>]) возвращает срез массива, начиная от индекса <начало> и заканчивая индексом <конец>, но не включает элемент с этим индексом. Если второй параметр не указан, то возвращаются все элементы до конца массива:

var Mass1 = [ 1, 2, 3, 4, 5 ];
var Mass2 = Mass1.slice(1, 4);
window.alert(Mass2.join(", ")); // "2, 3, 4"
var Mass3 = Mass1.slice(2);
window.alert(Mass3.join(", ")); // "3, 4, 5"

splice(<Начало>, <Количество>, [<Список значений>]) позволяет удалить, заменить или вставить элементы массива. Возвращает массив, состоящий из удаленных элементов:

var Mass1 = [ 1, 2, 3, 4, 5 ];
var Mass2 = Mass1.splice(2, 2);
window.alert(Mass1.join(", ")); // "1, 2, 5"
window.alert(Mass2.join(", ")); // "3, 4"
var Mass3 = Mass1.splice(1, 1, 7, 8, 9);
window.alert(Mass1.join(", ")); // "1, 7, 8, 9, 5"
window.alert(Mass3.join(", ")); // "2"
var Mass4 = Mass1.splice(1, 0, 2, 3, 4);
window.alert(Mass1.join(", ")); // "1, 2, 3, 4, 7, 8, 9, 5"
window.alert(Mass4.join(", ")); // Пустой массив


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

var Mass = [ "Один", "Два", "Три" ];
document.write(Mass.toString()); // "Один,Два,Три"
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити