Массивы и их методы

↑ 1.4 JavaScript: основы · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: junior

Зачем это на собесе

Ежедневный инструмент; на интервью просят реализовать map/filter/reduce и знать, какие методы мутируют.

Объяснение

КатегорияМетоды
Преобразование (новый массив)map, filter, slice, concat, flat, flatMap, toSorted, toReversed, toSpliced, with
Свёрткаreduce, reduceRight
Поискfind, findIndex, findLast, indexOf, includes, some, every
Мутирующиеpush, pop, shift, unshift, splice, sort, reverse, fill
ПрочееArray.from, Array.of, Array.isArray, at, join, entries/keys/values
const orders = [{ id: 1, total: 100, paid: true }, { id: 2, total: 50, paid: false }];
orders.filter(o => o.paid).map(o => o.total);                     // [100]
orders.reduce((sum, o) => sum + o.total, 0);                      // 150
Object.groupBy(orders, o => o.paid ? "paid" : "open");            // { paid: [...], open: [...] }
[...new Set([1, 2, 2, 3])];                                       // уникальные
[3, 1, 10].sort();               // [1, 10, 3] — по умолчанию строки!
[3, 1, 10].sort((a, b) => a - b);                                 // [1, 3, 10]
const copy = [...arr].sort();     // не мутируя (или toSorted)
Array.from({ length: 5 }, (_, i) => i * 2);                       // [0,2,4,6,8]

Сложность: push/pop O(1), shift/unshift O(n), includes/indexOf O(n), sort O(n log n).

Итерация: for...of, forEach (нельзя прервать; break невозможен), for (быстрее и с await), some/every для прерывания.

Нюансы и подводные камни

  • sort без компаратора сортирует как строки и мутирует массив.
  • map с async возвращает массив промисов: await Promise.all(arr.map(...)).
  • forEach не ждёт await внутри.
  • arr.length = 0 очищает массив; delete arr[i] создаёт «дыру».
  • reduce без начального значения на пустом массиве бросает ошибку.
  • Изменение массива во время перебора приводит к пропускам.

Практика

  1. Реализуйте свои map, filter, reduce, flat.
  2. Сгруппируйте заказы по клиенту и посчитайте суммы через reduce.
  3. Уберите дубликаты по ключу объекта.

Вопросы с ответами

Связанные темы