← Все вопросы

Как отфильтровать массив в JavaScript — оставить только нужные элементы?

Задан 1 месяц назад982 просмотров2 ответа
8

Есть массив чисел, хочу оставить только чётные. Или массив объектов — оставить только активных пользователей. Слышал про filter, но не до конца понял, как отфильтровать массив и что именно возвращать из функции.

2 ответа

12
✓ Принятый ответ — помог автору

filter создаёт новый массив из тех элементов, для которых твоя функция вернула true.

Главное — в колбэке вернуть условие (булево значение), а не сам элемент:

const nums = [1, 2, 3, 4, 5, 6];
const even = nums.filter(n => n % 2 === 0);
console.log(even); // [2, 4, 6]

С объектами так же — пишешь условие по полю:

const users = [
  { name: 'Аня', active: true },
  { name: 'Боб', active: false },
  { name: 'Вера', active: true }
];
const activeUsers = users.filter(u => u.active);
console.log(activeUsers.length); // 2

Исходный массив не меняетсяfilter, как и map, возвращает копию.

Частая ошибка новичков: забыть return в фигурных скобках.

// неправильно — ничего не вернули, отфильтруется ПУСТОЙ массив
nums.filter(n => { n % 2 === 0 });

// правильно
nums.filter(n => { return n % 2 === 0; });
// или без скобок — стрелка возвращает сама
nums.filter(n => n % 2 === 0);

Если стрелка без фигурных скобок — значение возвращается автоматически. Как только поставил { }, нужен явный return.

4

Подсказка: filter отвечает на вопрос «оставить элемент или нет», а map — «во что его превратить». Их часто путают.

Если нужно и отфильтровать, и преобразовать — сцепи их:

const nums = [1, 2, 3, 4, 5];
const res = nums.filter(n => n > 2).map(n => n * n);
console.log(res); // [9, 16, 25]

Ваш ответ

Войдите, чтобы ответить на вопрос.