Learning Book

Создание и базовые методы

Создание и базовые методы

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

// Литерал — предпочтительный способ
const empty = [];
const nums = [1, 2, 3, 4, 5];
const mixed = [1, 'hello', true, null];

// Array.from — из итерируемых или псевдомассивов
Array.from('hello')        // ['h', 'e', 'l', 'l', 'o']
Array.from({ length: 5 }, (_, i) => i * 2) // [0, 2, 4, 6, 8]
Array.from(new Set([1, 2, 2, 3])) // [1, 2, 3] — уникальные

// Array.of — создаёт из аргументов
Array.of(1, 2, 3)  // [1, 2, 3]

// new Array — лучше избегать
new Array(3)         // [empty × 3] — не [3]!
new Array(1, 2, 3)  // [1, 2, 3]
new Array(3) создаёт массив с 3 пустыми слотами (не значениями!). Array.from({ length: 3 }, () => 0) создаёт [0, 0, 0].

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

const arr = [1, 2, 3];

// В конец
arr.push(4, 5);       // arr = [1, 2, 3, 4, 5], возвращает 5 (новая длина)

// В начало
arr.unshift(0);       // arr = [0, 1, 2, 3, 4, 5]

// С конца
const last = arr.pop(); // arr = [0, 1, 2, 3, 4], last = 5

// С начала
const first = arr.shift(); // arr = [1, 2, 3, 4], first = 0

splice — швейцарский нож

splice мутирует оригинальный массив — удаляет и/или вставляет элементы:

const arr = [1, 2, 3, 4, 5];

// splice(start, deleteCount, ...items)
arr.splice(1, 2);        // удаляет 2 эл. с индекса 1: arr = [1, 4, 5]
arr.splice(1, 0, 10, 20); // вставляет без удаления: arr = [1, 10, 20, 4, 5]
arr.splice(2, 1, 99);    // заменяет 1 элемент: arr = [1, 10, 99, 4, 5]

slice — извлечение без мутации

slice возвращает новый массив, не меняет оригинал:

const arr = [1, 2, 3, 4, 5];

arr.slice(1, 3)   // [2, 3] — индексы 1 и 2 (3 — не включительно)
arr.slice(2)      // [3, 4, 5] — от индекса 2 до конца
arr.slice(-2)     // [4, 5] — последние 2 элемента
arr.slice()       // [1, 2, 3, 4, 5] — копия массива

// Оригинал не изменён
console.log(arr); // [1, 2, 3, 4, 5]

concat — объединение массивов

const a = [1, 2];
const b = [3, 4];

// concat — создаёт новый массив
const combined = a.concat(b);       // [1, 2, 3, 4]
const withMore = a.concat(b, [5, 6]); // [1, 2, 3, 4, 5, 6]

// Современный вариант — spread
const combined2 = [...a, ...b];

Разделите методы массива на две группы:

Мутирующие (изменяют оригинал):push, pop, shift, unshift, splice, sort, reverse, fill, copyWithin

Немутирующие (возвращают новый массив/значение):map, filter, reduce, slice, concat, find, findIndex, some, every, includes, indexOf

В ES2023 добавлены немутирующие версии: toSorted(), toReversed(), toSpliced(), with().