@dualdeazz

Почему не работает фильтрация?

Почему не работает фильтрация? Мне нужно оставлять только те объекты, у которых есть хотя-бы одно свойство Purpose равное тому значению, что лежит в props.purpose
638737fd64058757015889.png
Вот код фильтрации
props.medications.filter(f => props.purpose === "" ? f : f.Purposes.forEach(i => i.Purpose === props.purpose))
  • Вопрос задан
  • 71 просмотр
Решения вопроса 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Просто пройти по массиву и найти первый элемент, удовлетворяющий условию. Вернуть булево значение из коллбэка фильтра.

props.medications
  .filter(f => f.Purposes.findIndex(i => props.purpose === i.Purpose) > -1)
// Если ни одного нет, findIndex вернет -1,
// условие не выполнится и элемент отфильтруется.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@StiflerProger
const props = {
  purpose: "Здоровье марсиан",
  medications: [
    {
      Article: "Первое",
      Purposes: [
        {
          Purpose: "Мужское здоровье"
        },
        {
          Purpose: "Женское здоровье"
        }
      ]
    },
    {
      Article: "Второе",
      Purposes: [
        {
          Purpose: "Детское здоровье"
        }
      ]
    },
    {
      Article: "Третье",
      Purposes: [
        {
          Purpose: "Здоровье марсиан"
        },
        {
          Purpose: "Мужское здоровье"
        }
      ]
    }
  ]
};

console.log(
  props.medications.filter(
    (f) => !props.purpose || f.Purposes.find((e) => e.Purpose === props.purpose)
  )
);

Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы