Урок 08

Массивы

Создание

const arr = [1, 2, 3];
const empty = [];
const from = Array.from('abc'); // ['a', 'b', 'c']
const of = Array.of(1, 2, 3);   // [1, 2, 3]
const filled = new Array(5).fill(0); // [0, 0, 0, 0, 0]

Доступ

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

arr[0];     // 'a'
arr[arr.length - 1]; // 'c'
arr.at(-1); // 'c' — с конца

Длина

arr.length; // 3
arr.length = 2; // обрезает

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

arr.push('d');     // в конец, возвращает длину
arr.pop();         // из конца, возвращает элемент
arr.unshift('z');  // в начало
arr.shift();       // из начала

Изменение

arr[0] = 'x';
arr.splice(1, 1); // удалить 1 элемент с индекса 1
arr.splice(1, 0, 'y'); // вставить

Поиск

arr.indexOf('b');    // 1
arr.lastIndexOf('a');
arr.includes('a');   // true
arr.find((x) => x === 'b');    // 'b'
arr.findIndex((x) => x === 'b'); // 1

Перебор

arr.forEach((item, index) => console.log(item, index));

Преобразование

map

Применяет функцию к каждому элементу:

[1, 2, 3].map((x) => x * 2); // [2, 4, 6]

filter

Оставляет подходящие:

[1, 2, 3, 4].filter((x) => x % 2 === 0); // [2, 4]

reduce

Сворачивает в одно значение:

[1, 2, 3].reduce((acc, x) => acc + x, 0); // 6

С объектом:

['a', 'b', 'a'].reduce((acc, x) => {
    acc[x] = (acc[x] ?? 0) + 1;
    return acc;
}, {});
// { a: 2, b: 1 }

flat и flatMap

[1, [2, [3]]].flat(2); // [1, 2, 3]
[1, 2].flatMap((x) => [x, x * 2]); // [1, 2, 2, 4]

Проверки

[1, 2, 3].some((x) => x > 2);   // true
[1, 2, 3].every((x) => x > 0);  // true

Сортировка

[3, 1, 2].sort(); // [1, 2, 3] — по строке

[10, 2, 1].sort(); // [1, 10, 2] — лексикографически

[10, 2, 1].sort((a, b) => a - b); // [1, 2, 10]

sort мутирует массив. Копия:

[...arr].sort();

Разворот

[1, 2, 3].reverse(); // мутирует
[...arr].reverse();  // копия
[1, 2, 3].toReversed(); // ES2023, не мутирует

Объединение и нарезка

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

Spread

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

Копия:

const copy = [...arr];

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

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

Строка ↔ массив

'abc'.split('');   // ['a', 'b', 'c']
['a', 'b'].join(''); // 'ab'

Цепочки

const result = users
    .filter((u) => u.active)
    .map((u) => u.name)
    .sort();

Итоги

  • push, pop, shift, unshift
  • map, filter, reduce — основа
  • find, some, every
  • sort мутирует — копируй
  • Spread для копий и объединения
  • Деструктуризация для чтения