57. Методы массивов.

Каждый массив обладает набором методов, изначально определённых в объекте Array.prototype.

Многие из этих методов допускают косвенное применение к объектам, подобным массивам. Но некоторые методы меняют тот массив, у которого вызываются, а не все объекты, подобные массивам, допускают изменение (пример – строки).

join(separator) – вызывает у каждого элемента toString(), получившиеся результаты соединяет, используя указанную строку-разделитель (или запятую, если вызывается без аргумента);

toString() – аналог join(), вызванного без аргумента;

toLocaleString() – работает как toString(), но у каждого элемента вызывается toLocaleString();

valueOf() – аналог toString().

Методы преобразования в строку перебираю индексы массива от 0 до length-1. Их не интересует фактическое наличие индекса!

pop() Удаляет последний элемент из массива и возвращает удалённое значение.

push(element1, ..., elementN) Добавляет элементы в конец массива и возвращает новую длину массива.

shift() Удаляет и возвращает первый элемент массива, смещая последующие элементы к началу.

unshift(element1,...,elementN) Добавляет элементы в начало массива (блоком) и возвращает новую длину массива.

reverse() На месте обращает порядок следования элементов массива.

sort(compareFunction) На месте сортирует массив по возрастанию. Может принимать функцию сравнения (без неё – сравнивается строковое представление элементов).

concat(elementOrArray1,...,elementOrArrayN) Возвращает новый массив, состоящий из массива, на котором он был вызван, соединённого с другими массивами и/или значениями, переданными в качестве аргументов. Метод различает простые аргументы и аргументы- массивы (но без рекурсивной вложенности). Если в качестве аргумента передать методу concat() разреженный массив, он будет присоединён со всеми своими «дырами»:

slice(begin [,end]) Возвращает копию части массива в виде нового массива. Возвращаются элементы с индексами от begin до end, не включая end. Если индексы отрицательные – отнимаем от длины. Копировать весь массив: вызов slice() без аргументов.

Метод slice() в разреженном массиве воспринимает последовательность индексов непрерывной:

var a = [1, , , , , 6];
// здесь индексы "0" и "5"
var b = a.slice(2, 4);
// в b должны оказаться элементы с индексами "2" и "3"
// но их в a нет, и в b они не попадут
// т.е. в b нет ни индексов, ни элементов
// однако b.length = 2 (!!!)

splice(start, deleteCount, [item1],...,[itemN]) Изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые. Если start отрицателен – отнимаем от длины. Возвращаемое значение: массив, содержащий удалённые элементы.

var a = [10, 20, 30, 40, 50];
var b = a.splice(1, 3);
// a=[10, 50], b=[20, 30, 40]
var c = a.splice(1, 0, 20, 30, 40);
// a=[10, 20, 30, 40, 50], c=[]
var d = a.splice(1, 1, -1);
// a=[10, -1, 30, 40, 50], d=[20]
var e = a.splice(-1, 1, -1);
// a=[10, -1, 30, 40, -1], e=[50]

Метод splice() в разреженном массиве ведёт себя подобно методу slice() (считает последовательность индексов непрерывной):

indexOf(element [,startIndex]) lastIndexOf(element [,startIndex]) Методы ищут указанный элемент в массиве и возвращают первую позицию элемента или -1. Первый ищет от начала массива (или от указанной позиции) к концу, второй – от конца (или от указанной позиции) к началу.

Методы перебора элементов

Эти пять методов появились в ECMAScript 5. Методы принимают функцию f(), выполняемую для каждого элемента массива:

Редукция элементов

reduce(callback [,initialValue]) reduceRight(callback [,initialValue])

Методы (ECMAScript 5) формируют из массива скалярное значение при помощи функции-аккумулятора.

Эта функция с четырьмя аргументами: предыдущее значение аккумулятора, текущий элемент, текущий индекс, исходный массив. Функция возвращает новое значение аккумулятора.

Проход – со второго элемента, если не задано initialValue.

Проверка на массив

Array.isArray(obj)

Этот статический метод поверяет, является ли obj массивом, и возвращает true или false.