Массивы: методы
Полный обзор методов массивов по категориям.
Мутирующие
Меняют исходный массив:
arr.push(...) // добавить в конец
arr.pop() // удалить с конца
arr.unshift(...) // добавить в начало
arr.shift() // удалить с начала
arr.splice() // вставить/удалить/заменить
arr.reverse() // развернуть
arr.sort() // отсортировать
arr.fill() // заполнить
arr.copyWithin() // копировать внутри
Не мутирующие
Возвращают новый массив:
arr.slice() // копия части
arr.concat() // объединить
arr.map() // преобразовать
arr.filter() // оставить
arr.flat() // развернуть вложенные
arr.flatMap() // map + flat
arr.toSorted() // ES2023
arr.toReversed() // ES2023
arr.toSpliced() // ES2023
arr.with() // ES2023
Поиск
arr.indexOf(x) // индекс или -1
arr.lastIndexOf(x) // с конца
arr.includes(x) // true/false
arr.find(fn) // первый подходящий
arr.findIndex(fn) // индекс
arr.findLast(fn) // последний
arr.findLastIndex(fn)
Проверки
arr.some(fn) // хотя бы один
arr.every(fn) // все
Array.isArray(arr)
Преобразование
arr.join(',') // в строку
arr.toString()
arr.keys() // итератор индексов
arr.values() // итератор значений
arr.entries() // итератор пар
Свёртка
arr.reduce((acc, x) => acc + x, 0)
arr.reduceRight(...)
Сортировка
По умолчанию — лексикографически:
[10, 2, 1].sort(); // [1, 10, 2]
Числовая:
[10, 2, 1].sort((a, b) => a - b); // [1, 2, 10]
Строковая:
['б', 'а', 'в'].sort((a, b) => a.localeCompare(b));
Объекты:
users.sort((a, b) => a.age - b.age);
Стабильность сортировки: равные элементы сохраняют порядок.
flat и flatMap
[1, [2, [3, [4]]]].flat(); // [1, 2, [3, [4]]]
[1, [2, [3, [4]]]].flat(2); // [1, 2, 3, [4]]
[1, [2, [3, [4]]]].flat(Infinity); // [1, 2, 3, 4]
[1, 2].flatMap((x) => [x, x * 2]); // [1, 2, 2, 4]
at
[1, 2, 3].at(0); // 1
[1, 2, 3].at(-1); // 3
Лучше, чем arr[arr.length - 1].
ES2023: иммутабельные
const arr = [3, 1, 2];
arr.toSorted(); // [1, 2, 3], arr не меняется
arr.toReversed(); // [2, 1, 3]
arr.toSpliced(1, 1); // [3, 2]
arr.with(0, 99); // [99, 1, 2]
Не мутируют. Идеально для функционального стиля.
fill
new Array(3).fill(0); // [0, 0, 0]
[1, 2, 3].fill(0, 1); // [1, 0, 0]
copyWithin
[1, 2, 3, 4, 5].copyWithin(0, 3); // [4, 5, 3, 4, 5]
Редко используется.
from и of
Array.from('abc');
Array.from({ length: 5 }, (_, i) => i); // [0, 1, 2, 3, 4]
Array.from(new Set([1, 2, 2, 3])); // [1, 2, 3]
Array.of(1, 2, 3); // [1, 2, 3]
Array.of(7); // [7]
new Array(7); // [empty × 7]
Проверка и создание
Array.isArray([]); // true
Array.from({ length: 3 }); // [undefined, undefined, undefined]
Итоги
- Мутирующие:
push,pop,splice,sort - Не мутирующие:
map,filter,slice,toSorted - Поиск:
find,indexOf,includes - Преобразование:
flat,flatMap,join - ES2023:
toSorted,toReversed,with atдля доступа с конца