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(), выполняемую для каждого элемента массива:
every()
– возвращает true, если f() вернула true для каждого элемента;some()
– возвращает true, если f() вернула true хотя бы дляодного элемента;filter()
– возвращает массив элементов, для которых f() вернула true;map()
– возвращает массив с результатами вызова f();forEach()
– просто выполняет f() для каждого элемента;
Редукция элементов
reduce(callback [,initialValue])
reduceRight(callback [,initialValue])
Методы (ECMAScript 5) формируют из массива скалярное значение при помощи функции-аккумулятора.
Эта функция с четырьмя аргументами: предыдущее значение аккумулятора, текущий элемент, текущий индекс, исходный массив. Функция возвращает новое значение аккумулятора.
Проход – со второго элемента, если не задано initialValue.
Проверка на массив
Array.isArray(obj)
Этот статический метод поверяет, является ли obj массивом, и возвращает true или false.