Урок 01

Массивы: основы

Массив — упорядоченная коллекция элементов. Элементы доступны по индексу.

Создание

const empty = [];
const numbers = [1, 2, 3];
const mixed = [1, 'строка', true, null, { x: 1 }];

Через конструктор:

const arr = new Array(1, 2, 3);
const length3 = new Array(3); // [empty × 3]

Из итерируемого:

Array.from('abc');        // ['a', 'b', 'c']
Array.from({ length: 3 }, (_, i) => i); // [0, 1, 2]
Array.of(1, 2, 3);        // [1, 2, 3]

Доступ

const arr = ['a', 'b', 'c'];

arr[0];         // 'a'
arr[1];         // 'b'
arr[arr.length - 1]; // 'c'
arr.at(-1);     // 'c'
arr.at(-2);     // 'b'

Индексация с 0.

Длина

arr.length; // 3

Изменение длины:

const arr = [1, 2, 3, 4, 5];
arr.length = 3; // [1, 2, 3] — обрезает
arr.length = 5; // [1, 2, 3, empty, empty]

Добавление и удаление

const arr = [1, 2, 3];

arr.push(4);      // [1, 2, 3, 4], возвращает длину
arr.pop();        // [1, 2, 3], возвращает 4
arr.unshift(0);   // [0, 1, 2, 3], возвращает длину
arr.shift();      // [1, 2, 3], возвращает 0
  • push/pop — с конца (быстро)
  • unshift/shift — с начала (медленно, сдвигает все элементы)

Изменение

arr[0] = 'x';
arr[10] = 'y'; // создаст разреженный массив

splice

Универсальный метод для вставки и удаления:

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

arr.splice(2, 1);          // удалить 1 элемент с индекса 2 → [1, 2, 4, 5]
arr.splice(1, 0, 'new');   // вставить с индекса 1
arr.splice(1, 2, 'a', 'b'); // заменить 2 элемента на 'a', 'b'
arr.splice(-1, 1);         // удалить последний

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

slice

Копия части массива, без мутации:

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

arr.slice(1, 3);  // [2, 3]
arr.slice(2);     // [3, 4, 5]
arr.slice(-2);    // [4, 5]
arr.slice();      // копия всего

concat

Объединение:

[1, 2].concat([3, 4]);    // [1, 2, 3, 4]
[1].concat(2, [3], 4);    // [1, 2, 3, 4]

join

Массив в строку:

['a', 'b', 'c'].join('-'); // 'a-b-c'
[1, 2, 3].join('');        // '123'

Spread

Копия и объединение:

const copy = [...arr];
const merged = [...a, ...b];
const withExtra = [0, ...arr, 10];

Деструктуризация

const [first, second, ...rest] = [1, 2, 3, 4];
// first = 1, second = 2, rest = [3, 4]

Пропуск:

const [, second] = [1, 2, 3];
// second = 2

Значения по умолчанию:

const [a = 10, b = 20] = [1];
// a = 1, b = 20

Обмен переменных:

let a = 1, b = 2;
[a, b] = [b, a];

Многомерные

const matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];

matrix[1][2]; // 6

Проверка

Array.isArray([]);       // true
Array.isArray({});       // false
Array.isArray('строка'); // false

Разреженные массивы

const sparse = [1, , 3]; // [1, empty, 3]
sparse.length; // 3
sparse[1];     // undefined

Избегай — поведение методов непредсказуемо.

Итоги

  • Массивы — упорядоченные коллекции
  • Индексация с 0, length
  • push/pop/shift/unshift
  • splice мутирует, slice копирует
  • Spread для копий
  • Деструктуризация для чтения