← Все вопросы

Как найти элемент в массиве по условию через find в JavaScript?

Задан 14 месяцев назад380 просмотров2 ответа
7

Есть массив объектов-товаров, нужно достать один объект по id. Перебирать циклом и ломать через break как-то громоздко. Подскажите, как найти элемент в массиве по условию — вроде есть метод find?

2 ответа

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

find возвращает первый элемент, для которого функция вернула true, и сразу останавливается. Если ничего не нашёл — вернёт undefined.

const products = [
  { id: 1, name: 'Книга' },
  { id: 2, name: 'Ручка' },
  { id: 3, name: 'Тетрадь' }
];
const item = products.find(p => p.id === 2);
console.log(item); // { id: 2, name: 'Ручка' }

Чем отличается от filter: filter всегда возвращает массив (пусть и из одного элемента), а find — сам элемент (или undefined). Если тебе нужен один объект — бери find.

Важно проверять результат на undefined, иначе словишь ошибку при обращении к полю:

const item = products.find(p => p.id === 99);
console.log(item); // undefined
// console.log(item.name); // TypeError: Cannot read properties of undefined
if (item) {
  console.log(item.name);
}

Родственные методы:

  • findIndex — вернёт индекс найденного (или -1).
  • includes — есть ли значение в массиве (true/false), удобно для простых значений.
  • indexOf — индекс значения (или -1), тоже для простых значений, не для объектов по полю.
4

Если нужно просто проверить «есть ли вообще такой элемент» — необязательно find. Для простых значений короче includes:

const ids = [1, 2, 3];
console.log(ids.includes(2)); // true

А для «есть ли хоть один подходящий объект» — some:

const hasExpensive = products.some(p => p.price > 1000);

some возвращает true/false, а не сам элемент.

Ваш ответ

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