> В чем разница между filter и slice для удаления элементов в JavaScript? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Black Wall Group (BWG)
Стек: JavaScript
> Пример ответа
Короткий ответ
filter создаёт новый массив, включающий только элементы, прошедшие проверку в callback-функции, не изменяя исходный массив. slice возвращает копию части массива на основе индексов начала и конца, не удаляя элементы из оригинала. Для удаления элементов filter подходит лучше, так как он явно предназначен для фильтрации по условию, а slice - для извлечения непрерывного диапазона.
Подробное объяснение
filter - это метод массива, который принимает callback-функцию, вызываемую для каждого элемента. Если callback возвращает true, элемент включается в новый массив; если false - исключается. Это иммутабельный подход, подходящий для удаления по произвольному условию (например, все числа больше 10).
slice - это метод, который возвращает новый массив, содержащий элементы с индекса start до end (не включая end). Он не предназначен для удаления по условию, а только для извлечения непрерывного подмассива. Для удаления конкретных элементов с помощью slice нужно комбинировать несколько вызовов, что менее читаемо и эффективно.
Ключевые различия:
filterудаляет по условию,slice- по позиции.filterможет удалять произвольные элементы,slice- только последовательные.filterтребует callback,slice- только индексы.- Оба не мутируют исходный массив.
На практике
Для удаления элементов по логическому условию (например, удалить все объекты с active: false) используйте filter. Для удаления одного или нескольких элементов по индексу (например, удалить третий элемент) проще использовать splice (мутирует) или комбинацию slice и spread-оператора (иммутабельно). slice редко применяется для удаления - это скорее инструмент для копирования или извлечения подмассива.
Пример кода
JAVASCRIPTconst arr = [1, 2, 3, 4, 5];// filter - удаляем элементы больше 3const filtered = arr.filter(item => item <= 3);console.log(filtered); // [1, 2, 3]// slice - удаляем элемент по индексу (иммутабельно)const indexToRemove = 2;const sliced = [...arr.slice(0, indexToRemove), ...arr.slice(indexToRemove + 1)];console.log(sliced); // [1, 2, 4, 5]// slice для удаления диапазонаconst removedRange = [...arr.slice(0, 1), ...arr.slice(3)];console.log(removedRange); // [1, 5]
Как отвечать на собеседовании
Начни с чёткого определения обоих методов. Подчеркни, что filter - это декларативный способ удаления по условию, а slice - низкоуровневый инструмент для работы с индексами. Упомяни, что filter иммутабелен, а slice тоже не мутирует, но для удаления требует дополнительных операций. Приведи пример, когда filter удобнее (удаление по свойству объекта), и когда slice может быть оправдан (удаление по индексу в иммутабельном стиле). Избегай сравнения с splice, если не спросят - это мутирующий метод.
Что проверяет интервьюер
Интервьюер оценивает понимание базовых методов массивов, их семантики и области применения. Важно показать, что ты различаешь декларативный (filter) и императивный (slice) подходы, знаешь про иммутабельность и умеешь выбирать правильный инструмент для задачи. Также проверяется способность объяснить trade-off между читаемостью и производительностью.
Типичные ошибки
- Утверждение, что
sliceудаляет элементы - он только копирует. - Попытка использовать
sliceдля удаления по условию без комбинации сfilter. - Путаница с
splice(мутирует) иslice(не мутирует). - Игнорирование того, что
filterвсегда возвращает новый массив, что может быть неэффективно для больших данных. - Непонимание, что
sliceс одним аргументом копирует до конца массива, а не удаляет.
> Похожие задачи по frontend
Куда пойдет выполнение при конкурентном запуске нескольких задач в JavaScript
Что такое директива 'use strict' в JavaScript и как она влияет на код
Какие инструменты для стилей вы используете и выделяете ли что-то в JS
Как реализовать функцию, принимающую селектор и возвращающую объект с методами для добавления классов и навешивания событий
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью