# Методы массивов: 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']
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://thedvlpr.gitbook.io/javascript-for-dummies/metody-massivov-splice-slice-concat.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
