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.