Какие основные методы массивов в JavaScript вы знаете?

Ответ

Методы массивов в JavaScript используются для их модификации, обхода и преобразования. Их можно разделить на несколько категорий:

Методы, изменяющие исходный массив (мутирующие):

  • push(...items) / pop() – добавляет элементы в конец / удаляет последний элемент.
  • unshift(...items) / shift() – добавляет элементы в начало / удаляет первый элемент.
  • splice(start, deleteCount, ...items) – универсальный метод для удаления, замены или вставки элементов.
  • sort(compareFn) / reverse() – сортирует и переворачивает массив.

Методы, возвращающие новый массив (не мутирующие):

  • slice(start, end) – возвращает новый массив — копию части исходного.
  • concat(...items) – возвращает новый массив, объединяя исходный с другими массивами или значениями.
  • map(callbackFn) – создаёт новый массив, применяя функцию к каждому элементу.
  • filter(callbackFn) – создаёт новый массив из элементов, прошедших проверку.

Методы для поиска и обхода:

  • find(callbackFn) / findIndex(callbackFn) – возвращает первый удовлетворяющий условию элемент / его индекс.
  • forEach(callbackFn) – выполняет функцию для каждого элемента (аналог цикла for).
  • some(callbackFn) / every(callbackFn) – проверяет, удовлетворяет ли условию хотя бы один / все элементы.

Пример использования:

const numbers = [1, 2, 3];

// Мутирующий метод
numbers.push(4); // numbers теперь [1, 2, 3, 4]

// Не мутирующие методы
const doubled = numbers.map(x => x * 2); // [2, 4, 6, 8]
const even = numbers.filter(x => x % 2 === 0); // [2, 4]
const found = numbers.find(x => x > 2); // 3

// Исходный массив не изменился не мутирующими методами
console.log(numbers); // [1, 2, 3, 4]

Ответ 18+ 🔞

О, так, смотри, сейчас я тебе про массивы в JavaScript расскажу так, что ты, блядь, не только поймёшь, но и запомнишь на всю оставшуюся жизнь, как отче наш. Это ж не просто какая-то хуйня, это основа основ, инструменты, без которых ты — как Герасим без Муму, нихуя не скажешь.

Вот смотри, все эти методы можно, грубо говоря, поделить на две банды.

Первая банда — отморозки, которые всё ломают. Они приходят в твой массив и начинают его пилить, резать, переставлять. Исходник после них — пиздец, помойка. Это мутирующие методы, ёпта.

  • push(...items) / pop() — один суёт новые элементы в конец массива, как последнюю водку в холодильник, а второй этот последний элемент и вытаскивает, как пробку. pop() — это как «ой, всё».
  • unshift(...items) / shift() — те же яйца, только с другого конца. unshift засовывает в начало, shift выдёргивает первый элемент. Представь очередь в поликлинике, и тут приходит какой-то чиновник и встаёт вперёди всех — вот это unshift.
  • splice(start, deleteCount, ...items) — это, блядь, швейцарский нож, универсальный солдат. Хочешь удалить элементы с какого-то места? Пожалуйста. Хочешь удалить и на их место новые вставить? Да без проблем, ёбана! Главное — координаты указать верно.
  • sort(compareFn) / reverse() — первый всех построит по росту (или как скажешь), а второй просто развернёт шеренгу задом наперёд. sort без функции сравнения — это отдельная песня, он строки сортирует, а числа может так переставить, что волосы дыбом встанут. Запомни это, как «Муму» Тургенева.

Вторая банда — интеллигенты в очках. Они с твоим массивом ничего плохого не делают. Берут, смотрят, что-то своё на его основе создают и отдают тебе новенькое, а твой исходник остаётся цел и невредим. Не мутирующие, красавчики.

  • slice(start, end) — фотограф. Делает снимок (копию) куска твоего массива. «Дай-ка мне, дружок, элементы с пятого по десятый». И даёт, не трогая оригинал.
  • concat(...items) — строитель. Берёт твой массив, берёт ещё какие-то массивы или значения и склеивает их в один длинный-предлинный. Новый дом построил, старый стоит.
  • map(callbackFn) — волшебник-преобразователь. Проходит по каждому элементу, колдует над ним (умножает на два, оборачивает в тег, делает имя заглавными буквами) и возвращает новый массив с результатами колдовства. Исходный массив — священная корова, её не трогают.
  • filter(callbackFn) — вышибалa в клубе. Стоит на входе и проверяет каждого: «Ты чётный? Проходи. А ты больше пяти? Иди нахуй». И формирует новый массив только из тех, кого пропустил.

Ну и третья категория — сыщики и наблюдатели. Они ничего не меняют, ни нового не создают (ну, почти), а просто смотрят и докладывают.

  • find(callbackFn) / findIndex(callbackFn) — первый находит первый элемент, который подходит под условие, и говорит: «Вот он, держи». Второй не ленится и ещё индекс этого счастливчика называет.
  • forEach(callbackFn) — это просто красивый for цикл, переодетый в метод. Проходит по всем элементам и для каждого выполняет какую-то операцию. Результата не возвращает, просто делает дело.
  • some(callbackFn) / every(callbackFn) — философы. some спрашивает: «Хотя бы один элемент условию соответствует?» Если да — говорит true. every — зануда: «А все ли, блядь, соответствуют?» Только если все — будет true.

Смотри, как это в деле выглядит, на живом примере:

const numbers = [1, 2, 3];

// Подходит мутант-отморозок и меняет всё
numbers.push(4); // numbers теперь [1, 2, 3, 4]. Исходник испорчен.

// А теперь работа интеллигентов
const doubled = numbers.map(x => x * 2); // [2, 4, 6, 8] — НОВЫЙ массив
const even = numbers.filter(x => x % 2 === 0); // [2, 4] — ещё один НОВЫЙ
const found = numbers.find(x => x > 2); // 3 — просто значение нашли

// И что мы видим? Исходный массив цел! Мутант его изменил, а интеллигенты — нет.
console.log(numbers); // [1, 2, 3, 4] — как после push и осталось

Вот и вся магия, ёпта. Главное — понимать, кто из этих методов бандит, а кто порядочный гражданин, чтобы потом не охуеть, куда делись твои данные.