@lexstile

Как отфильтровать объекты по заданным критериям?

Есть данные для фильтрации:
// динамически выбирается пользователем
const options = ['7ca7e2d7-52ab-4b08-a853-d4de70f2f8e9', '59e91946-3265-4035-9bd4-031ac5cdb16a'];

Есть данные, которые необходимо отфильтровать:
const data = [
  {
    type: '7ca7e2d7-52ab-4b08-a853-d4de70f2f8e9',
    compatibleOptions: ['7ca7e2d7-52ab-4b08-a853-d4de70f2f8e9', 'a55a6288-f5af-473d-9c85-141b9e31f914', 'b261b6a7-a9d9-4ace-abf8-96c448dbd4bd', 'd6103b02-66b1-49a4-9aaf-7d3d9b51fef6', '3b0f01f0-3e11-4ca7-a547-549c4cf63093'],
  },
  {
    type: '59e91946-3265-4035-9bd4-031ac5cdb16a',
    compatibleOptions: ['59e91946-3265-4035-9bd4-031ac5cdb16a', 'a55a6288-f5af-473d-9c85-141b9e31f914', 'd6103b02-66b1-49a4-9aaf-7d3d9b51fef6', '3b0f01f0-3e11-4ca7-a547-549c4cf63093', 'fac73b04-fd59-4c1b-92d8-4567ff5c450e'],
  },
  {
    type: 'ec9ec0c2-f2f0-4d1f-bc17-916c8b679f7e',
    compatibleOptions: ['ec9ec0c2-f2f0-4d1f-bc17-916c8b679f7e', 'a55a6288-f5af-473d-9c85-141b9e31f914', 'b261b6a7-a9d9-4ace-abf8-96c448dbd4bd', '3b0f01f0-3e11-4ca7-a547-549c4cf63093'],
  },
  {
    type: 'b261b6a7-a9d9-4ace-abf8-96c448dbd4bd',
    compatibleOptions: ['b261b6a7-a9d9-4ace-abf8-96c448dbd4bd', '7ca7e2d7-52ab-4b08-a853-d4de70f2f8e9', '59e91946-3265-4035-9bd4-031ac5cdb16a', 'ec9ec0c2-f2f0-4d1f-bc17-916c8b679f7e', 'fac73b04-fd59-4c1b-92d8-4567ff5c450e'],
  },
  {
    type: 'a55a6288-f5af-473d-9c85-141b9e31f914',
    compatibleOptions: ['a55a6288-f5af-473d-9c85-141b9e31f914', '7ca7e2d7-52ab-4b08-a853-d4de70f2f8e9', '59e91946-3265-4035-9bd4-031ac5cdb16a', 'ec9ec0c2-f2f0-4d1f-bc17-916c8b679f7e', 'b261b6a7-a9d9-4ace-abf8-96c448dbd4bd', 'd6103b02-66b1-49a4-9aaf-7d3d9b51fef6', '3b0f01f0-3e11-4ca7-a547-549c4cf63093', 'fac73b04-fd59-4c1b-92d8-4567ff5c450e'],
  },
  {
    type: 'd6103b02-66b1-49a4-9aaf-7d3d9b51fef6',
    compatibleOptions: ['d6103b02-66b1-49a4-9aaf-7d3d9b51fef6', '7ca7e2d7-52ab-4b08-a853-d4de70f2f8e9', '59e91946-3265-4035-9bd4-031ac5cdb16a', 'a55a6288-f5af-473d-9c85-141b9e31f914', '3b0f01f0-3e11-4ca7-a547-549c4cf63093'],
  },
  {
    type: '3b0f01f0-3e11-4ca7-a547-549c4cf63093',
    compatibleOptions: ['3b0f01f0-3e11-4ca7-a547-549c4cf63093', '7ca7e2d7-52ab-4b08-a853-d4de70f2f8e9', '59e91946-3265-4035-9bd4-031ac5cdb16a', 'ec9ec0c2-f2f0-4d1f-bc17-916c8b679f7e', 'a55a6288-f5af-473d-9c85-141b9e31f914', 'd6103b02-66b1-49a4-9aaf-7d3d9b51fef6'],
  },
  {
    type: 'fac73b04-fd59-4c1b-92d8-4567ff5c450e',
    compatibleOptions: ['fac73b04-fd59-4c1b-92d8-4567ff5c450e', '7ca7e2d7-52ab-4b08-a853-d4de70f2f8e9', '59e91946-3265-4035-9bd4-031ac5cdb16a', 'b261b6a7-a9d9-4ace-abf8-96c448dbd4bd'],
  },
  {
    type: '5d394039-1d17-43e1-8e94-038463f4c91b',
    compatibleOptions: null,
  },
];

Необходимо получить массив объектов (вернуть объект целиком) из data, где во свойстве compatibleOptions содержатся все элементы из options.

type текущего объекта всегда равен compatibleOptions[0] текущего объекта.
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
Seasle
@Seasle Куратор тега JavaScript
data.filter(entry => options.every(option => entry.compatibleOptions?.includes(option)));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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