Какие методы для работы с массивами в JavaScript существуют и какие чаще используются
Что проверяют
Рабочий словарь и понимание, какие методы меняют исходный массив, а какие возвращают новый. Для фронтенда это не теория: от этого напрямую зависит, перерисуется ли компонент. Следом обычно дают мини-задачу на преобразование данных или спрашивают, что делает sort без компаратора.
Как отвечать
Сгруппируйте, а не перечисляйте подряд:
- возвращают новый массив:
map,filter,slice,concat,flat,flatMap; - поиск и свёртка:
reduce,find,findIndex,findLast,some,every,includes,indexOf. Разница между последними двумя видна наNaN:includesего находит,indexOfнет; - мутирующие:
pushиpop,shiftиunshift,splice,sort,reverse,fill,copyWithin; - иммутабельные двойники из ES2023:
toSorted,toReversed,toSpliced,with. Поддержаны во всех актуальных браузерах и в Node начиная с 20; - создание и группировка:
Array.from(в том числе с функцией преобразования и по любому итерируемому),Array.of,Object.groupByиз ES2024 вместо ручногоreduce; - мелочи, которые спрашивают:
at(-1)для последнего элемента,Array.isArrayдля проверки типа.
Обязательно скажите про поведение по умолчанию: sort сравнивает строковые представления, поэтому [10, 9, 1].sort() даёт [1, 10, 9], для чисел нужен компаратор (a, b) => a - b. Сортировка стабильна по спецификации начиная с ES2019.
Про частоту честный ответ такой: в продуктовом коде основное это map, filter, find, reduce и расширение через спред. Покажите на примере состояния: добавление через [...items, next], удаление через filter, точечное обновление через map или with.
Где спотыкаются
Вызывают push или sort прямо на массиве из состояния и удивляются, что компонент не перерисовался. Ссылка не изменилась, сравнение по ссылке считает данные прежними.
Пишут reduce там, где хватило бы filter и map, ради мнимой экономии прохода. Читаемость падает, выигрыш на тысяче элементов неизмерим.
Используют delete arr[i], чтобы убрать элемент. Остаётся дырка, length не меняется, а дальнейший перебор ведёт себя непредсказуемо.