Методы работы с массивами в JavaScript

Взаимосвязь свойства length с числовыми свойствами массивов

Свойство массивов length взаимосвязано с числовыми свойствами. Некоторые встроенные методы массива (например, join, slice, indexOf и т.д.) учитывают значение свойства length при своём вызове. Другие методы (например, push, splice и т.д.) в результате своей работы также обновляют свойство length массива.

При установке свойства в массиве, если свойство имеет действительный индекс и этот индекс выходит за пределы текущих границ массива, движок соответствующим образом обновит свойство length:

Уменьшение свойства length приводит к удалению элементов массива:

[свернуть]

Доступ к элементу масcива по индексу

[свернуть]

Создание масcива

Создание масcива методом Array.of()

Метод Array.of() создаёт новый экземпляр массива Array из произвольного числа аргументов (вне зависимости от числа или типа аргумента).

Разница между Array.of() и конструктором Array:

  • заключается в обработке целочисленных аргументов:
    1. Array.of(7) создаёт массив с одним элементом 7,
    2. Array(7) создаёт пустой массив со значением свойства length равным 7 (подразумевается 7 пустых слотов, а не слоты со значением undefined).

Возвращаемое значение: новый массив Array.

[свернуть]
Создание массива методом Array.from()

Метод Array.from() позволяет создавать массивы из:

  • массивоподобных объектов (объектов со свойством length и элементами по индексным ключам) или
  • итерируемых объектов (объектов, из которых вы можете достать их элементы, например Map или Set).

Синтаксис:

  • где
    arrayLike — массивоподобный или итерируемый объект, преобразуемый в массив;
  • mapFn (необязательный) — отображающая функция, вызываемая для каждого элемента массива;
  • thisArg (необязательный) — значение, используемое в качестве this при выполнении функции mapFn.

Метод Array.from() возвращает новый экземпляр Array.

[свернуть]

Создание нового массива из данного с изменением элементов переданной функцией ( Array.map() )

Метод Array.map() создаёт новый массив с результатами вызова указанной функции на каждом элементе данного массива.

Параметры метода Array.map():

  • callback — функция, создающая элемент в новом массиве, принимает три аргумента:
    1. currentValue — текущий обрабатываемый элемент массива;
    2. index — индекс текущего обрабатываемого элемента в массиве;
    3. array — массив, по которому осуществляется проход;
  • thisArg (необязательный) — значение, используемое в качестве this при вызове функции callback.

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

Метод map() вызывает переданную функцию callback один раз для каждого элемента, в порядке их появления и конструирует новый массив из результатов её вызова. Функция callback вызывается только для индексов массива, имеющих присвоенные значения, включая undefined. Она не вызывается для пропущенных элементов массива (то есть для индексов, которые никогда не были заданы, которые были удалены или которым никогда не было присвоено значение.

Если в метод map() был передан параметр thisArg, при вызове callback он будет использоваться в качестве значения this. В противном случае в качестве значения this будет использоваться значение undefined. В конечном итоге, значение this, наблюдаемое из функции callback, определяется согласно обычным правилам определения this, видимого из функции.

Метод map не изменяет массив, для которого он был вызван (хотя функция callback может это делать).

Особенности метода map():

  1. Диапазон элементов, обрабатываемых методом map() , устанавливается до первого вызова функции callback:
    • Элементы, добавленные в массив после начала выполнения метода map() , не будут посещены функцией callback.
    • Если существующие не посещённые элементы массива изменяются функцией callback, их значения, переданные в функцию, будут значениями на тот момент времени, когда метод map()  посетит их.
    • Удалённые элементы массива посещены не будут.

Отображение массива квадратных корней из массива чисел: 

Отображение массива чисел с использованием функции, содержащей аргумент:

Использование метода map() на объекте строки String для получения массива байт в кодировке ASCII, представляющего значения символов:

Подробнее в примерах о методе map()

[свернуть]

Создание нового массива из данного со всеми элементами, соответствующими условию ( Array.filter() )

Метод filter() создаёт новый массив со всеми элементами, прошедшими проверку согласно условию, заданному в передаваемой функции.

Метод filter() не изменяет массив, для которого он был вызван.

Синтаксис метода filter():

Параметры метода filter():

  • callback — функция, которая будет вызвана для каждого элемента массива, если функция возвращает true, то элемент остаётся в массиве, если false, то удаляется; функция принимает 3 аргумента:
    1. element — текущий обрабатываемый элемент в массиве;
    2. index (необязательный) — индекс текущего обрабатываемого элемента в массиве;
    3. array (необязательный) — массив, по которому осуществляется проход.
  • thisArg (необязательный) — значение, используемое в качестве this при вызове функции callback (по умолчанию undefined).

Возвращаемое значение:

  • новый массив с элементами, которые соответствуют условию, заданному в callback (т.е. если callback вернёт true).
  • пустой массив — если ни один элемент исходного массива не пройдёт условие.

Метод filter() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве, и конструирует новый массив со всеми значениями, для которых функция callback вернула true или значение, становящееся true при приведении в boolean.

Особенности метода filter():

  1. Функция callback вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.
  2. Элементы массива, не прошедшие проверку функцией callback, пропускаются и не включаются в новый массив.
  3. Диапазон обрабатываемых элементов устанавливается до первого вызова функции callback
    • элементы, добавленные в массив после начала выполнения метода filter(), не будут посещены функцией callback;
    • если существующие элементы массива изменятся, значения, переданные в функцию callback, будут значениями на тот момент времени, когда метод filter() посетит их;
    • удалённые элементы посещены не будут.

Если в метод filter() был передан параметр thisArg, при вызове callback он будет использоваться в качестве значения this. В противном случае, в качестве значения this будет использоваться значение undefined. В конечном итоге, значение this, наблюдаемое из функции callback, определяется согласно обычным правилам определения this, видимого из функции.

Ещё пример:

[свернуть]

Поиск элемента в массиве

Определение индекса элемента в массиве ( Array.indexOf(), Array.lastIndexOf() )

Метод Array.indexOf(), используя алгоритм строгого сравнения, возвращает:

  • первый (наименьший) индекс элемента массива, значение которого равно значению, переданному в метод;
  • или -1, если переданное значение не найдено.

Метод Array.lastIndexOf() возвращает:

  • последний (наибольший) индекс элемента массива, значение которого равно значению, переданному в метод;
  • или -1, если переданное значение не найдено.

Синтаксис методов Array.indexOf(), Array.lastIndexOf():

Параметры методов Array.indexOf(), Array.lastIndexOf():

  • searchElement — значение искомого элемента массива;
  • fromIndex (необязательный) — позиция (индекс элемента, включительно) в массиве, с которой начинать поиск элемента searchElement:
    1. значение по умолчанию равно 0;
    2. если fromIndex >= array.length, то возвращается -1 (поиск в массиве выполняться не будет);
    3. при отрицательных значениях (если fromIndex < 0) поиск производится начиная с индекса (array.length + fromIndex) по возрастанию (если вычисленный индекс меньше 0, будет выполнен поиск по всему массиву).

Возвращаемое значение: индекс искомого элемента или -1 (элемент не найден).

[свернуть]

Наличие в массиве элемента с заданным значением ( Array.includes() )

Метод Array.includes()  определяет, содержится ли в массиве указанный элемент, возвращая, соответственно, true или false.

Метод includes() является общим: он не требует чтобы this являлся массивом, и может быть применён к другим типам объектов (например, к массивоподобным объектам).

Отличие includes() от indexOf():

  1. он использует алгоритм SameValueZero вместо строгого сравнения на равенство, что позволяет обнаруживать элементы массива NaN;
  2. отсутствующие элементы разрежённого массива обрабатываются как неопределенные (undefined).

Параметры метода Array.includes():

  • searchElement — искомое значение элемента массива;
  • fromIndex (необязательный) — позиция (индекс элемента, включительно) в массиве, с которой начинать поиск элемента searchElement:
    1. значение по умолчанию равно 0;
    2. при отрицательных значениях (если fromIndex < 0) поиск производится начиная с индекса (array.length + fromIndex) по возрастанию;
    3. если fromIndex >= array.length, то возвращается false. При этом поиск не производится.

Возвращаемое значение: тип Boolean.

Если fromIndex отрицательный, то вычисляется индекс (array.length + fromIndex), начиная с которого (включительно) будет производиться поиск элемента searchElement. Если вычисленный индекс меньше нуля, то поиск будет производиться во всём массиве.

Пример ниже показывает использование метода includes() на объекте arguments.

[свернуть]

Поиск элемента со значением, удовлетворяющим условию ( Array.some() )

Метод some() проверяет, удовлетворяет ли какой-либо элемент массива условию, заданному в передаваемой функции.

Метод возвращает false при любом условии для пустого массива.

Синтаксис метода:

Параметры метода some():

  • callback — функция, вызывается для каждого элемента в массиве и возвращает значение, которое может быть приведено к логическому значению true или false; принимает три аргумента:
    1. element — текущий обрабатываемый элемент массива;
    2. index (необязательный) — индекс текущего обрабатываемого элемента массива;
    3. array (необязательный) — массив, по которому осуществляется проход.
  • thisArg (необязательный) — значение, используемое в качестве this при выполнении функции callback (по умолчанию thisArg имеет значение undefined).

Возвращаемое значение:

  • true, если функция проверки возвращает значениеtrue хотя бы для одного элемента массива. Иначе, false.

Метод some() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдет такой, для которого callback вернет истинное значение (значение, становящееся равным true при приведении его к типу Boolean). Если такой элемент найден, метод some() немедленно вернёт true. В противном случае, если callback вернёт false для всех элементов массива, метод some() вернёт false.

Функция callback вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.

Если в метод some() был передан параметр thisArg, при вызове callback он будет использоваться в качестве значения this. В противном случае в качестве значения this будет использоваться значение undefined. В конечном итоге, значение this, наблюдаемое из функции callback, определяется согласно обычным правилам определения this, видимого из функции.

Метод some() не изменяет массив, для которого он был вызван.

Особенности метода some():

  1. Диапазон элементов, обрабатываемых методом some(), устанавливается до первого вызова функции callback;
    • элементы, добавленные в массив после начала выполнения метода some(), не будут посещены функцией callback;
    • если существующие элементы массива изменятся, значения, переданные в функцию callback, будут значениями на тот момент времени, когда метод some() посетит их;
    • удалённые элементы посещены не будут.

[свернуть]
Проверка всех элементов массива на условие ( Array.every() )

Метод every() проверяет, удовлетворяют ли все элементы массива условию, заданному в передаваемой функции callback.

Метод every() возвращает true при любом условии для пустого массива.

Синтаксис метода every() :

Параметры метода:

  • callback — функция, вызывается для каждого элемента в массиве и возвращает значение, которое может быть приведено к логическому значению true или false; принимает три аргумента:
    1. element — текущий обрабатываемый элемент массива;
    2. index (необязательный) — индекс текущего обрабатываемого элемента массива;
    3. array (необязательный) — массив, по которому осуществляется проход.
  • thisArg (необязательный) — значение, используемое в качестве this при выполнении функции callback (по умолчанию thisArg имеет значение undefined).

Возвращаемое значение:

  • true если функция проверки возвращает значение true для каждого элемента массива. Иначе, false.

Метод every() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдет такой, для которого callback вернет ложное значение (значение, становящееся равным false при приведении его к типу Boolean). Если такой элемент найден, метод every() немедленно вернёт false. В противном случае, если callback вернёт true для всех элементов массива, метод every() вернёт true.

Функция callback вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.

Если в метод every() был передан параметр thisArg, при вызове callback он будет использоваться в качестве значения this. В противном случае в качестве значения this будет использоваться значение undefined. В конечном итоге, значение this, наблюдаемое из функции callback, определяется согласно обычным правилам определения this, видимого из функции.

Метод every() не изменяет массив, для которого он был вызван.

Особенности метода every():

  1. Диапазон элементов, обрабатываемых методом every(), устанавливается до первого вызова функции callback:
    • элементы, добавленные в массив после начала выполнения метода every(), не будут посещены функцией callback;
    • если существующие элементы массива изменятся, значения, переданные в функцию callback, будут значениями на тот момент времени, когда метод every() посетит их;
    • удалённые элементы посещены не будут.

Метод every() действует подобно квантору всеобщности в математике. В частности, он вернёт true для пустого массива. Это так называемая бессодержательная истина (vacuously true) — все элементы пустого множества удовлетворяют любому заданному условию.

[свернуть]
Поиск индекса элемента массива, удовлетворяющего условию ( Array.findIndex() )

Метод findIndex() возвращает:

  • индекс элемента массива (первого найденного), удовлетворяющего условию проверяющей функции, переданной в параметре метода;
  • -1, в противном случае.

Метод findIndex() является общим: он может быть применён к другим типам объектов (например, к массивоподобным объектам).

Синтаксис метода findIndex():

Параметры метода findIndex():

  • callback — функция, вызывается для каждого элемента в массиве и возвращает значение, которое может быть приведено к логическому значению true или false; принимает три аргумента:
    1. element — текущий обрабатываемый элемент массива;
    2. index — индекс текущего обрабатываемого элемента массива;
    3. array — массив, по которому осуществляется проход.
  • thisArg (необязательный) — значение, используемое в качестве this при выполнении функции callback (по умолчанию thisArg имеет значение undefined).

Метод findIndex() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве, до тех пор, пока она не вернёт true. Если такой элемент найден, метод findIndex() немедленно вернёт индекс этого элемента. В противном случае, метод findIndex() вернёт -1.

Функция callback вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.

Метод findIndex не изменяет массив, для которого он был вызван.

Особенности метода findIndex():

  1. Диапазон элементов, обрабатываемых методом findIndex(), устанавливается до первого вызова функции callback:
    • Элементы, добавленные в массив после начала выполнения метода findIndex(), не будут посещены функцией callback.
    • Если существующие не посещённые элементы массива изменяются функцией callback, их значения, переданные в функцию, будут значениями на тот момент времени, когда метод findIndex() посетит их.
    • Удалённые элементы массива посещены не будут.
  2. Пустые элементы разреженного массива обрабатываются как undefined.

[свернуть]
Поиск значения элемента массива, удовлетворяющего условию ( Array.find() )

Метод Array.find() возвращает:

  • значение элемента массива (первого найденного), удовлетворяющего условию проверяющей функции, переданной в параметре метода;
  • undefined, в противном случае.

Синтаксис метода Array.find():

Параметры метода Array.find():

  • callback — функция, вызывающаяся для каждого значения в массиве, принимает три аргумента:
    1. element — текущий обрабатываемый элемент массива;
    2. index — индекс текущего обрабатываемого элемента массива;
    3. array — массив, по которому осуществляется проход.
  • thisArg (необязательный) — значение, используемое в качестве this при выполнении функции callback (по умолчанию thisArg имеет значение undefined).

Возвращаемое значение: значение элемента из массива, если элемент прошёл проверку, иначе undefined.

Метод find() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве, до тех пор, пока она не вернёт true. Если такой элемент найден, метод find() немедленно вернёт значение этого элемента. В противном случае, метод find() вернёт undefined.

До Firefox 34 функция callback не вызывалась для «дыр» в массивах (bug 1058394).

Метод find() не изменяет массив, для которого он был вызван.

Особенности метода find():

  • Диапазон элементов, обрабатываемых методом find(), устанавливается до первого вызова функции callback:
    1. Элементы, добавленные в массив после начала выполнения метода find(), не будут посещены функцией callback.
    2. Если существующие не посещённые элементы массива изменяются функцией callback, их значения, переданные в функцию, будут значениями на тот момент времени, когда метод find() посетит их.
    3. Удалённые элементы массива посещены не будут.

[свернуть]

Итерирование (перебор элементов) массива

Итерирование (перебор элементов) массива ( Array.forEach() )

Метод forEach() для каждого элемента массива один раз вызывает переданную в него функцию. Это метод используется для перебора элементов массива.

Синтаксис метода forEach():

Параметры метода forEach():

  • callback — функция, вызываемая для каждого значения в массиве, принимает три аргумента:
    1. element — текущий обрабатываемый элемент массива;
    2. index — индекс текущего обрабатываемого элемента массива;
    3. array — массив, по которому осуществляется проход.
  • thisArg (необязательный) — значение, используемое в качестве this при выполнении функции callback (по умолчанию thisArg имеет значение undefined).

ВАЖНО! Метод forEach() ничего не возвращает, его используют только для перебора (вместо цикла for).

forEach() вызывает callback один раз для каждого элемента в массиве в возрастающем порядке.

Особенности метода forEach():

  • Диапазон элементов, обрабатываемых методом forEach(), устанавливается до первого вызова функции callback:
    1. Элементы, добавленные в массив после начала выполнения метода forEach(), не будут посещены функцией callback.
    2. Если существующие не посещённые элементы массива изменяются функцией callback, их значения, переданные в функцию, будут значениями на тот момент времени, когда метод forEach() посетит их.
    3. Удалённые элементы массива посещены не будут.
  • Функция callback вызывается только для реально существующих элементов массива; метод не вызывается для отсутствующих элементов массива.
  • forEach() не изменяет напрямую объект, для которого он вызывается, но объект может быть изменен вызовами callback.

Ещё пример:

[свернуть]

Возвращение ключей каждого индекса элементов массива ( Array.keys() )

Метод Array.prototype.keys()  возвращает новый итератор массива, содержащий ключи каждого индекса в массиве.

[свернуть]

Редактирование массива (добавление и удаление элементов)

Добавление и удаление элемента массива: push(), unshift(), pop(), shift()

Добавление элемента в конец массива (метод push() )

Метод push():

  • присоединяет элементы к концу массива, используя для определения места вставки свойство length;
  • возвращает новое значение свойства length объекта, для которого был вызван данный метод. 

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

Особенности метода push():

  1. Если свойство length не может быть преобразовано в число, будет использован индекс 0. Если свойство length не существует, то в этом случае оно будет создано.
  2. К строкам (как массивоподобным объектам) метод push() применён быть не может, так как строки являются неизменяемыми.

Примеры

Функция, которая принимает значение переменной n и возвращает массив, заполненный числами от 1 до n

[свернуть]

Добавление элемента в начало массива (метод unshift() )

Метод unshift():

  • добавляет элементы в начало массива;
  • возвращает новое значение свойства length объекта, для которого был вызван данный метод. 

Метод unshift() не является привязанным к типу Array: этот метод может быть вызван или применён и к массивоподобным объектам. 

Удаление элемента с конца массива (метод pop() )

Метод pop():

  • удаляет последний элемент из массива (изменяет длину массива);
  • возвращает значение удаленного из массива элемента (или undefined, если массив пуст).

Метод pop() не является привязанным к типу Array: этот метод может быть вызван или применён и к массивоподобным объектам. 

Удаление элемента из начала массива (метод shift() )

Метод shift():

  •  удаляет первый элемент из массива (изменяет длину массива, последовательно сдвигая значения индексов по направлению к нулю);
  • возвращает значение удаленного из массива элемента (или undefined, если массив пуст).

[свернуть]

Обрезка массива ( Array.slice() )

Метод slice() возвращает новый массив, содержащий копию части исходного массива.

Параметры метода slice ():

  • begin (необязательный, включительно) — индекс, с которого начинается извлечение (отсчёт начинается с 0):
    1. если индекс отрицательный, begin указывает смещение от конца последовательности (т.е. вызов slice(-2) извлечёт два последних элемента последовательности);
    2. если begin не определен, slice() начинает работать с индекса 0;
    3. если begin больше длины последовательности — вернется пустой массив.
  • end (необязательный, исключая) — индекс (счёт начинается с нуля), по которому заканчивать извлечение:
    1. если индекс отрицательный, end указывает смещение от конца последовательности (т.е. вызов slice(2, -1) извлечёт из последовательности элементы начиная с третьего элемента с начала и заканчивая вторым с конца);
    2. если end опущен, slice() извлекает все элементы до конца последовательности (arr.length).

Метод slice() извлекает элементы с индексом меньше end (т.е. вызов slice(1, 4) извлечёт элементы со второго по четвёртый (элементы по индексам 1, 2 и 3).

Возвращаемое значение: новый массив, содержащий извлеченные элементы.

Метод slice() не изменяет исходный массив, а возвращает новую «одноуровневую» копию, содержащую копии элементов, вырезанных из исходного массива.

Элементы исходного массива копируются в новый массив по следующим правилам:

  1. Метод slice() копирует значения строк и чисел (но не объекты String и Number) в новый массив:
    • изменения строки или числа в одном массиве никак не затрагивает другой;
    • если к любому массиву будет добавлен новый элемент, это никак не повлияет на другой массив.
  2. Метод slice() копирует ссылки на объекты в новый массив (копирование «по ссылке»). И оригинал, и новый массив ссылаются на один и тот же объект: если объект по ссылке будет изменён, изменения будут видны и в новом, и в исходном массивах.

[свернуть]
Добавление и удаление элементов массива с определённым индексом ( Array.splice() )

Метод splice():

  • изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые;
  • возвращает массив, содержащий удалённые элементы:
    1. если удалён один элемент, вернётся массив из одного элемента;
    2. если никакие элементы не будут удалены, вернётся пустой массив.

Синтаксис метода splice():

Параметры метода splice():

  1. start — индекс, начиная с которого (включительно) изменяется массив:
    • если больше длины массива, start будет установлен на длину массива (array.length);
    • если отрицателен, указывает индекс элемента с конца.
  2. deleteCount — целое число, показывающее количество удаляемых из массива элементов:
    • если равен 0, элементы не удаляются; 
    • если больше количества элементов, оставшихся в массиве, начиная с индекса start, то будут удалены все элементы до конца массива.
  3. itemN (необязательные параметры) — добавляемые к массиву элементы. Если не указаны, то splice() просто удалит элементы из массива.

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

[свернуть]

Соединение (конкатенация) массивов ( Array.concat() )

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

Параметры метода Array.concat():

  • valueN — объекты  и (или) значения, соединяемые в новый массив.

Возвращаемое значение: новый экземпляр Array.

Метод concat создаёт новый массив, состоящий из элементов массива, на котором он был вызван, за которыми по порядку следуют (для каждого аргумента):

  • все элементы аргумента (если аргумент является массивом), либо
  • сам аргумент (если он массивом не является).

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

ВАЖНО! Любая операция над новым массивом (если только элемент не является ссылкой) не будет затрагивать исходные массивы, и наоборот.

Метод concat копирует в новый массив:

  • значения строк и чисел;
  • ссылки на объекты (т.е. копирование по ссылке: и оригинал, и новый массив ссылаются на один и тот же объект; если объект по ссылке будет изменён, изменения будут видны и в новом массиве, и в исходном объекте).

[свернуть]

Изменение массива в JavaScript

Копирование пoследовательности элементов массива внутри массива ( Array.copyWithin() )

Метод copyWithin() копирует последовательность элементов массива внутри него в позицию, начинающуюся по индексу target. Копия берётся по индексам, задаваемым вторым и третьим аргументами start и end

Параметры метода copyWithin():

  • target —  начальный индекс позиции цели (куда копировать элементы);
  • start — начальный индекс позиции источника, с которой начинают копироваться элементы;
  • end (необязательный параметр) — конечный индекс позиции источника, на которой заканчивается копирование элементов (по умолчанию равен длине массива).

Аргументы target, start и end приводятся к Number и обрезаются до целых значений.

Если аргумент start является отрицательным, он трактуется как length+start, где length — это длина массива. Если аргумент end является отрицательным, он трактуется как length+end.

Функция copyWithin намеренно является обобщённой, она не требует, чтобы значение this внутри неё было объектом Array.

Функция copyWithin является изменяющим методом, она изменит объект this и вернёт его, а не просто вернёт копию.

[свернуть]

Заполнение всех элементов массива от начального индекса до конечного индекса указанным значением ( Array.fill() )

Элементы массива заполняются в полузакрытом интервале [start, end).

Параметры метода arr.fill():

  1. value -значение, заполняющее массив;
  2. start (необязательный параметр) — начальный индекс;
  3. end (необязательный параметр) — конечный индекс.

Возвращаемое значение: изменённый массив (метод fill является изменяющим методом, он изменит объект this и вернёт его, а не его копию).

Аргументы start и end являются необязательными со значениями по умолчанию, равными 0 и length объекта this соответственно.

Если аргумент start является отрицательным, он трактуется как length+start, где length — это длина массива. Если аргумент end является отрицательным, он трактуется как length+end.

Метод fill намеренно является обобщённым, он не требует, чтобы значение this внутри него было объектом Array.

Если аргумент value​​​​​ является объектом, тo метод fill заполнит массив ссылками на этот объект.

[свернуть]

Переворачивание порядка элементов в массиве ( Array.reverse() )

Метод reverse() переворачивает порядок элементов в массиве: первый элемент становится последним, а последний — первым. Т.е. указанный метод на месте переставляет элементы массива, на котором он был вызван, изменяет массив и возвращает ссылку на него.

array.reverse() параметров не имеет и возвращает перевернутый (обращенный) массив.

[свернуть]

Сортировка элементов массива ( Array.sort() )

Подробнее…

Метод Array.sort() сортирует элементы массива на месте и возвращает отсортированный массив.

Порядок сортировки по умолчанию соответствует порядку кодовых точек Unicode.

Параметры метода Array.sort():

  • compareFunction (необязательный параметр) — указывает функцию, определяющую порядок сортировки; если опущен, массив сортируется в соответствии со значениями кодовых точек каждого символа Unicode, полученных путём преобразования каждого элемента в строку.

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

Функция в методе sort будет выполнена для каждой пары элементов внутри массива (текущий-следующий или предыдущий-следующий). Т.о. если функция сравнения compareFunction предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента a и b, то:

  • если compareFunction(a, b) < 0, сортировка поставит a по меньшему индексу, чем b, то есть, a идёт первым ( a будет сдвинут в начало массива, и b станет следующим после a);
  • если compareFunction(a, b) = 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам;
  • если compareFunction(a, b) > 0, сортировка поставит b по меньшему индексу, чем a.

Функция compareFunction(a, b) должна всегда возвращать одинаковое значение для определённой пары элементов a и b. Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.

Ещё пример:

[свернуть]

Разворачивание массива массивов. Применение функции к аккумулятору и каждому значению массива (слева-направо), сводя массив к одному значению ( Array.reduce() )

Метод Array.reduce() применяет функцию к аккумулятору и каждому значению массива (слева-направо), сводя его к одному значению (возвращая одно результирующее значение).

Array.reduceRight() применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.

Параметры метода Array.reduce():

  • callback — функция, выполняющаяся для каждого элемента массива, принимает четыре аргумента:
    1. accumulator — аккумулятор, аккумулирующий значение, которое возвращает функция callback после посещения очередного элемента, либо значение initialValue, если оно предоставлено;
    2. currentValue — текущий обрабатываемый элемент массива;
    3. index (необязательный) — индекс текущего обрабатываемого элемента массива;
    4. array (необязательный) — массив, для которого была вызвана функция reduce;
    5. initialValue (необязательный) — объект, используемый в качестве первого аргумента при первом вызове функции callback.

Метод reduce() выполняет функцию callback один раз для каждого элемента, присутствующего в массиве, за исключением пустот.

При первом вызове функции, параметры accumulator и currentValue могут принимать одно из двух значений. Если при вызове reduce() передан аргумент initialValue, то значение accumulator будет равным значению initialValue, а значение currentValue будет равным первому значению в массиве. Если аргумент initialValue не задан, то значение accumulator будет равным первому значению в массиве, а значение currentValue будет равным второму значению в массиве.

Если массив пустой и аргумент initialValue не указан, будет брошено исключение TypeError. Если массив состоит только из одного элемента (независимо от его положения в массиве) и аргумент initialValue не указан, или если аргумент initialValue указан, но массив пустой, то будет возвращено одно это значение, без вызова функции callback.

Примеры отсюда…

Примеры

Суммирование всех значений в массиве:

Суммирование значений в массиве объектов:

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

Разворачивание массива массивов:

Склеивание массивов, содержащихся в объектах массива, с использованием оператора расширения и initialValue:

Получение сумм элементов массива:

[свернуть]

[свернуть]

Удаление повторяющихся элементов из массива

Значение элемента в Set может присутствовать только в одном экземпляре, что обеспечивает его уникальность в коллекции Set.

[свернуть]

Преобразование данных массива в другой тип данных

Объединение элементов массива в строку ( Array.join() )

Метод Array.join() преобразует все элементы массива в строки и объединяет их в одну большую строку.

Элемент массива с типом undefined или null преобразуется в пустую строку.

Параметры метода Array.join():

  • separator (необязательный) — определяет строку, разделяющую элементы массива; в случае необходимости тип разделителя приводится к типу string:
    1. если он не задан, элементы массива разделяются запятой ‘,’;
    2. если разделитель — пустая строка, элементы массива ничем не разделяются в возвращаемой строке.

Возвращаемое значение: строка, содержащая все элементы массива. Если arr.length == 0, то будет возвращена пустая строка.

Соединение элементов массивоподобного объекта:

В следующем примере соединяется массивоподобный объект (в данном случае список аргументов функции) с использованием вызова Function.prototype.call для Array.prototype.join.

Ещё пример:

См. также метод split() (разделение строки на массив строк)

[свернуть]

Возвращение строкового представления массива ( Array.toString() )

Метод Array.toString() соединяет массив и возвращает одну строку, содержащую каждый элемент массива, разделённый запятыми.

Например, следующий код создаёт массив и использует метод toString для преобразования массива в строку.

JavaScript вызывает метод toString автоматически, когда массив представляется текстовым значением или когда массив находится в контексте конкатенации строк. Если массив имеет метод join(), то будет вызван именно он. В противном случае будет вызван метод Object.toString(), и будет возвращён результат его работы.

[свернуть]

Возвращение локализованного строкового представления массива и его элементов ( Array.toLocaleString() )

Метод Array.toLocaleString() возвращает локализованное строковое представление массива и его элементов. Переопределяет метод Object.toLocaleString(). Элементы преобразуются в строки с использованием своих собственных методов toLocaleString и эти строки разделяются локалезависимой строкой (например, запятой «,»).

[свернуть]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.