> For the complete documentation index, see [llms.txt](https://thedvlpr.gitbook.io/javascript-for-dummies/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://thedvlpr.gitbook.io/javascript-for-dummies/metody-massivov-splice-slice-concat.md).

# Методы массивов: splice, slice, concat

[![Generic badge](https://img.shields.io/badge/JavaScript-%D0%B4%D0%BB%D1%8F%20%D1%82%D1%83%D0%BF%D1%8B%D1%85-green.svg)](https://img.shields.io/badge/JavaScript-%D0%B4%D0%BB%D1%8F%20%D1%82%D1%83%D0%BF%D1%8B%D1%85-green.svg)

![](/files/-M8WKDGoCnvA3txqtPDi)

В предыдущем уроке я рассказал тебе о `массивах` и `базовых методах` для работы с ними. В этом и последующих уроках мы разберем, практически, полный список методов, которые постоянно применяются в разработке.

#### **Метод splice** <a href="#toc_1" id="toc_1"></a>

В предыдущем уроке мы узнали как добавлять элементы в `начало/конец массива`, а так же как удалять элементы с `конца/начала массива`. Скорее всего ты задавался вопросом, а как же удалить элемент, если он не в начале массива и не в конце.

Для данного действия, существует метод `splice`, которым ты в будущем будешь пользоваться очень часто, т.к. этот метод умеет и **добавлять** и **удалять элементы** в любом месте массива. Переходим к примеру использования:

```javascript
const languages = ['python', 'java', 'js'];
languages.splice(0, 2);
console.log(languages); // ['js']
```

Обрати внимание на аргументы при вызове `splice()`. Первый аргумент – `0`, а второй –`2`.

**Первый аргумент** – это указание индекса (позиции) элемента в массиве, с которого нужно начинать удаление.

**Второй аргумент** – количество элементов, которые нужно удалить с указанной позиции.

Итого, этим `languages.splice(0, 2)`, мы сказали: ***удали 2 элемента начиная с индекса 0***.

У этого метода есть еще одно достоинство – **умение добавлять элементы (любое количество) на место удаленных элементов**. Пример:

```javascript
const languages = ['python', 'java', 'js'];
languages.splice(0, 2, 'php', 'c#', 'c++');
console.log(languages); // ['php', 'c#', 'c++', 'js']
```

Первые два аргумента метода объяснены выше, а вот следующие за ними аргументы будут вставляться в массив на место удаленных элементов. Их количество не ограничено – хочешь, добавь один элемент, хочешь 10 тысяч элементов, все будет прекрасно работать.

Этот метод меняет массив **по месту**, т.е. меняет исходный массив.

#### **Метод slice** <a href="#toc_2" id="toc_2"></a>

Метод копирует указанные элементы массива и создает из них новый.

```javascript
const languages = ['java', 'python', 'php', 'c++', 'js'];
const newList = languages.slice(2, 4);

console.log(newList); // ['php', 'c++']
```

Метод `slice` не меняет исходный массив, а возвращает новый, поэтому для сохранения результатов его выполнения нужно эти самые результаты куда-то записать, для этого я определил константу `newList`.

Метод имеет только `2 аргумента`.

**Первый аргумент** – индекс элемента **С** которого нужно начинать копирование.

**Второй аргумент** – индекс **ДО** которого нужно копировать элементы **не включая его**.

`languages.slice(2, 4)` – в данном случае, мы говорим: ***скопируй элементы с индексом 2 и 3***. **Элемент с индексом 4 не будет включен.**

Аргументы могут быть не только `положительными числами`, но и `отрицательными`, в таком случае отсчёт будет начинаться с конца массива.

#### **Метод concat** <a href="#toc_3" id="toc_3"></a>

Метод `concat`, фактически, создает из нескольких массивов/значений один, объединяя их. Результат выполнения метода – `новый массив`, который нужно куда-то записать для дальнейшей работы с ним.

```javascript
const languages = ['python', 'java', 'js'];
const additionalLanguages = ['c#', 'c++'];

const summary = languages.concat(additionalLanguages); 
console.log(summary); // ['python', 'java', 'js', 'c#',\
// 'c++']
```

Метод принимает неограниченное количество аргументов. Если аргумент является массивом, то все его элементы копируются. В противном случае копируется сам аргумент.

```javascript
const languages = ['js'];
languages.concat(['python', 'php'], 'java'); // ['js', \
// 'python', 'php', 'java']
```
