---
sidebar_position: 5
---

# Методы массивов

### Добавление/удаление элементов

- **arr.push(...items)** – добавляет элементы в конец,
- **arr.pop()** – извлекает элемент из конца,
- **arr.shift()** – извлекает элемент из начала,
- **arr.unshift(...items)** – добавляет элементы в начало.

### splice

Это универсальный «швейцарский нож» для работы с массивами. Умеет всё: добавлять, удалять и заменять элементы.
Синтаксис:

```js
arr.splice(start[, deleteCount, elem1, ..., elemN
])
```

Он изменяет arr начиная с индекса start: удаляет deleteCount элементов и затем вставляет elem1, ..., elemN на их место.
Возвращает массив из удалённых элементов.
💥 Отрицательные индексы разрешены

### slice

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

```js
arr.slice([start], [end])
```

Это похоже на строковый метод str.slice, но вместо подстрок возвращает подмассивы.

### concat

Метод arr.concat создаёт новый массив, в который копирует данные из других массивов и дополнительные значения.

```js
let arr = [1, 2];
// создать массив из: arr и [3,4]
alert(arr.concat([3, 4])); // 1,2,3,4
```

### Перебор: forEach

Метод arr.forEach позволяет запускать функцию для каждого элемента массива.

```js
arr.forEach(function (item, index, array) {
  // ... делать что-то с item
});
```

## Поиск в массиве

### indexOf/lastIndexOf и includes

- arr.indexOf(item, from) ищет item начиная с индекса from и возвращает номер индекса, на котором был найден искомый
  элемент, в противном случае -1.
- arr.includes(item, from) ищет item начиная с индекса from и возвращает true, если поиск успешен.

💥 Метод includes правильно обрабатывает NaN, в отличие от indexOf

### find и findIndex/findLastIndex

Функция вызывается по очереди для каждого элемента массива:

- **item** – очередной элемент.
- **index** – его индекс.
- **array** – сам массив.
  Если функция возвращает **true**, поиск прерывается и возвращается **item**. Если ничего не найдено, возвращается
  `undefined`.

```js
let result = arr.find(function (item, index, array) {
  // если true - возвращается текущий элемент и перебор прерывается
  // если все итерации оказались ложными, возвращается undefined
});
```

У метода **arr.findIndex** такой же синтаксис, но он возвращает индекс, на котором был найден элемент, а не сам элемент.
Значение **-1** возвращается, если ничего не найдено.
Метод **arr.findLastIndex** похож на **findIndex**, но ищет справа налево, наподобие **lastIndexOf**.

### filter

Если найденных элементов может быть много, можно использовать arr.filter(fn).
Синтаксис схож с find, но filter возвращает массив из всех подходящих элементов:

```js
let results = arr.filter(function (item, index, array) {
  // если `true` -- элемент добавляется к results и перебор продолжается
  // возвращается пустой массив в случае, если ничего не найдено
});
```

## Преобразование массива

### map

Он вызывает функцию для каждого элемента массива и возвращает массив результатов выполнения этой функции.

```js
let result = arr.map(function (item, index, array) {
  // возвращается новое значение вместо элемента
});
```

### sort(fn)

Вызов arr.sort() сортирует массив на месте, меняя в нём порядок элементов.
Он также возвращает отсортированный массив, но обычно возвращаемое значение игнорируется, так как изменяется сам arr.

***По умолчанию элементы сортируются как строки.***
Чтобы использовать наш собственный порядок сортировки, нам нужно предоставить функцию в качестве аргумента arr.sort()

```js
function compare(a, b) {
  if (a > b) return 1; // если первое значение больше второго
  if (a == b) return 0; // если равны
  if (a < b) return -1; // если первое значение меньше второго
}
```
💥 ***Функция сравнения может вернуть любое число***
Лучше использовать стрелочные функции
```js
arr.sort( (a, b) => a - b );
```
Используйте localeCompare для строк

### reverse
Метод arr.reverse меняет порядок элементов в arr на обратный и возвращает новый массив.

### split и join
**str.split(delim)** - разбивает строку на массив по заданному разделителю delim.
**arr.join(glue)** - создаёт строку из элементов arr, вставляя glue между ними.

### reduce/reduceRight
Функция применяется по очереди ко всем элементам массива и «переносит» свой результат на следующий вызов.
Аргументы:
- **accumulator** – результат предыдущего вызова этой функции, равен initial при первом вызове (если передан initial),
- **item** – очередной элемент массива,
- **index** – его позиция,
- **array** – сам массив.

```js
let arr = [1, 2, 3, 4, 5];
let result = arr.reduce((sum, current) => sum + current, 0);
alert( result ); // 15
```
### Array.isArray
Массивы не образуют отдельный тип данных, так как основаны на объектах, поэтому typeof не может отличить простой объект от массива.

### Большинство методов поддерживают «thisArg»
Все методы за исключением sort(fn)
Значение параметра thisArg становится this для func.

### Другие функции
- arr.some(fn)/arr.every(fn) проверяет массив.
- arr.fill(value, start, end) – заполняет массив повторяющимися value, начиная с индекса start до end.
- arr.copyWithin(target, start, end) – копирует свои элементы, начиная с позиции start и заканчивая end, в себя, на позицию target (перезаписывая существующие).
- arr.flat(depth)/arr.flatMap(fn) создаёт новый плоский массив из многомерного массива.

🚀 **Источник: [https://learn.javascript.ru/array-methods](https://learn.javascript.ru/array-methods)**