JavaScript array methods

В JavaScript для хранения последовательностей мспользуется тип данных - массив (array).
Массив представляет из себя набор значений, доступ к которым осуществляется по их порядковому номеру. Значение в массиве называют элементом массива и обращаются к ним по их порядковому номеру, называемому индексом.
Массивы в JavaScript являются нетипизированными, внутри одного массива могут храниться элементы разных типов. Это могут быть как элементарные типы - строки, числа или символы, так и объекты и массивы.
Индексы в массивах JavaScript начинают отсчет с нуля и используют 32-битные значения.
Массивы в JavaScript являются динамическими (могут увеличиваться или уменьшаться в размерах). Объявлять заранее фиксированные размеры при их создании, а также перераспределять память при изменении размеров не нужно.
Массивы в JavaScript являются объектами.

Для создания массива можно использовать три способа:

  • через вызов конструктора Array():

var numArray = new Array(); // объявление массива

  • через вызов конструктора с числовым аргументом, указывающим количество элементов:

var numArray = new Array(10); // создание массива из 10 элементов

cокращенный способ:  

var numArray = new numArray('one', 'two', 'three', 'four', 'five');

  • литеральный:

`var numArray = [‘one’, ‘two’, ‘three’, ‘four’, ‘five’];

Для доступа к элементам массива используется оператор [ ] (квадратные скобки). Слева от скобок должна быть ссылка на сам массив, внутри скобок должно находиться выражение, возвращающее неотрицательное целое значение.

Запись в массив:

numArray[0] = "one"; // запись 0-го элемента в массив myArray

Чтение из массива:

x = numArray[0]; // в результате в переменной x окажется значение первой ячейки массива

Для доступа к свойствам существуют два основных способа – точка и квадратные скобки.

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

var numArray = ['one', 'two', 'three', 'four', 'five'];
x = numArray.length;
y = numArray[1+2];

console.log(x + " " + y);

// 5 four

Самый простой способ добавить элемент в массив - просто присвоить значение новым индексам:

numArray[5] = "six";

Существует специальный метод - push():

numArray.push("seven");

добавит значение в конец массива, а команда

numArray.push("eight", 9);

добавит сразу два элемента в конец массива - строку "eight" и число 9. Возвращаемое методом значение будет содержать длину (количество элементов) получившегося массива.

Добавить элементы в конец массива также можно просто изменив свойство массива length:

numArray.length = 20;

В этом случае количество элементов в массиве увеличится, в конец массива добавятся пустые элементы.

Array.unshift()

Добавить элементы в начало массива можно с помощью метода unshift():

numArray.unshift("null", "zero");

добавит в начало нашего массива два элемента со значениями “null” и “zero” остальные элементы сместятся на позиции с более старшими индексами. Метод unshift() также возвращает длину получившегося массива. Таким образом выражение:

x = numArray.unshift("null", "zero");

поместит два новых элемента в начало массива numArray и присвоит переменной х значение 22 (Потому что предыдущей командой мы установили размер массива - 20).

Array.delete()

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

delete numArray[2];

значение 3-го элемента массива будет установлено в undefined, т.е. очищено, однако количество элементов в массиве не изменится, все остальные элементы останутся на своих местах.

Для удаления элементов в конце массива можно прекрасно воспользоваться командой установки длины массива - изменение свойства length:

numArray.length = 13;

Также удалить элемент в конце массива можно с помощью метода pop() (противоположного методу push()), который уменьшает длину массива на один элемент и возвращает значение удаленного элемента.

Также есть метод shift() (противоположный методу unshift) который удаляет элемент в начале массива и сдвигает все элементы на одну позицию в начало.

Array.join()

Array.join() - превращает все элементы массива в строки, объединяет их и возвращает получившуюся строку, по умолчанию для разделения используются запятые. В необязательном аргументе можно указать подстроку, которая будет использоваться для разделения значений:

var numArray = ['one', 'two', 'three', 'four', 'five'];
numString = numArray.join("-");

В строковую переменную numString будет записано значение "one-two-three-four-five"

Array.reverse()

Array.reverse() - меняет порядок следования элементов в массиве на обратный и возвращает уже переупорядоченный массив:

var numArray = new Array('one', 'two', 'three', 'four', 'five');

console.log(numArray.reverse());

выведет в консоль значения ['five', 'four', 'three', 'two', 'one'].

Array.sort()

Array.sort() - сортирует элементы в исходном массиве и возвращает отсортированный массив. Если метод использовать без аргумента (функции сортировки), то результат будет отсортирован в алфавитном порядке (в порядке следования символов в Unicode), путем преобразования всего, что возможно в строковый тип. Все, что привести к строкам невозможно - помещается в конец массива:

var numArray = new Array('one', 'two', 'three', 'four', 'five');
numArray = numArray.sort();
console.log(numArray);

приведет к получению массива вот такого вида:

[ 'five', 'four', 'one', 'three', 'two' ]

В качестве аргумента в метод sort() можно передать функцию сравнения. Если результат, возвращаемый функцией сравнения, меньше 0, то сортировка поставит а перед b, и наоборот. Например, чтобы вывести в консоль значения , отсортированные в обратном алфавитном порядке мы можем воспользоваться вот такой командой:

var numArray = new Array('one', 'two', 'three', 'four', 'five');
console.log(numArray);
console.log(numArray.sort(function(a, b) {return b.localeCompare(a);}));
[ 'one', 'two', 'three', 'four', 'five' ]
[ 'two', 'three', 'one', 'four', 'five' ]

В данном случае используется метод localeCompare() объекта String, позволяющий сравнивать объекты типа String или строковые литералы.

A если элементы массива состоят из цифр то их можно сравнивать непосредственно:

var mArray = new Array(1, 2, 3, 4, 5);
console.log(mArray);
console.log(mArray.sort(function(a, b) {return b - a;}));
[ 1, 2, 3, 4, 5 ]
[ 5, 4, 3, 2, 1 ]

Array.concat()

Array.concat() - возвращает (не изменяя исходного) новый массив с добавлением элементов, переданных в метод в качестве аргумента:

console.log(numArray.concat("hundred"));

приведет к выводу в консоль значения [ 'two', 'three', 'one', 'four', 'five', 'hundred' ].

Array.slice()

Array.slice() - возвращает подмассив из массива, от первого до второго (но не включая его) из указанных аргументов:

var mArray = new Array(1, 2, 3, 4, 5);
console.log(mArray);
console.log(mArray.slice(1,3));

приведет к выводу в консоль значений с индексами 1 и 2.

[ 1, 2, 3, 4, 5 ]
[ 2, 3 ]

Array.splice()

Array.splice() - универсальная функция, которая позволяет удалять элементы из массива и вставлять новые.

В качестве аргумента в этот метод можно передать данные:

  • 1 аргумент - позиция элемента, с которого начинается действие метода;
  • 2 аргумент - количество удаляемых элементов, начиная со стартовой позиции, указанной в предыдущем аргументе. (Если второе значение не указано, будут удалены все элементы, начиная с первого аргумента);
  • 3 аргумент и последующие (любое количество) - элементы массива, которые будут добавлены начиная с позиции, указанной в первом аргументе.

Метод изменяет исходный массив и возвращает массив удаленных элементов. Если ни один элемент не удален, возвращается пустое значение.

var mArray = new Array(1, 2, 3, 4, 5);
console.log(mArray);
console.log(mArray.splice(1,3,27,28,29));
console.log(mArray);
console.log(mArray.splice(1,3));
console.log(mArray);
[ 1, 2, 3, 4, 5 ]       // console.log(mArray);
[ 2, 3, 4 ]             // console.log(mArray.splice(1,3,27,28,29));
[ 1, 27, 28, 29, 5 ]    // console.log(mArray);
[ 27, 28, 29 ]          // console.log(mArray.splice(1,3));
[ 1, 5 ]                // console.log(mArray);

Go to JavaScript tutorial