Как «синхронизировать» несколько фильтров?

Приветствую!

Есть массив данных, которые необходимо отфильтровать.
С одним фильтром проблем не возникает, но как синхронизировать несколько (например, пользователь, событие и выбранный интервал даты), чтобы отображаемый список уменьшался по мере выбора новых фильтров.

5f53e52d87028466598470.png

const items = [
    {
        id: "1",
        status: 100,
        event: "Открытие двери",
        user: 'Константин',
        user_pic: '../img/user.png',
        created_at:  '2020-09-01T12:31',
    },

    {
        id: "2",
        status: 200,
        event: "Вызов в домофон",
        user: 'Константин',
        user_pic: '../img/user.png',
        created_at:  '2020-09-01T12:30',
    },

    {
        id: "3",
        status: 300,
        event: "Звонок",
        user: 'Антонина',
        user_pic: '../img/user.png',
        created_at:  '2020-08-03T18:30',
    },

    {
        id: "4",
        status: 400,
        event: "Срабатывание сигнализации",
        user: 'Олег',
        user_pic: '../img/user.png',
        created_at:  '2020-07-28T10:40',
    },
]
  • Вопрос задан
  • 164 просмотра
Решения вопроса 1
coderisimo
@coderisimo Куратор тега JavaScript
Как всегда - общая идея реализации. Можно добавить столько фильтров сколь нужно. Все они работают в связке. Каждый элемент проходит сквозь "сито" установленных фильтров. Если он удовлетворяет критериям отбора - оказывается в результирующей выборке.

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Karpion
Слово "синхронизировать" здесь неуместно.

Я так понял, Вам надо искать элементы массива, которые удовлетворяют сразу всем условиям. Т.е. надо объединить условия оператором "и".

Как Вы вообще ищете по массиву?
Ответ написан
@Steppp
С инпутами думаю сам допилишь! Там не сложно)))
А со временем, лень конвертировать))) в unix и обратно, хотя можно и без конвертации попробовать))) Не было практики)
const items = [
  {
      id: "1",
      status: 100,
      event: "Открытие двери",
      user: 'Константин',
      user_pic: '../img/user.png',
      created_at:  '2020-09-01T12:31',
  },

  {
      id: "2",
      status: 200,
      event: "Вызов в домофон",
      user: 'Константин',
      user_pic: '../img/user.png',
      created_at:  '2020-09-01T12:30',
  },

  {
      id: "3",
      status: 300,
      event: "Звонок",
      user: 'Антонина',
      user_pic: '../img/user.png',
      created_at:  '2020-08-03T18:30',
  },

  {
      id: "4",
      status: 400,
      event: "Срабатывание сигнализации",
      user: 'Олег',
      user_pic: '../img/user.png',
      created_at:  '2020-07-28T10:40',
  },

  {
      id: "5",
      status: 100,
      event: "Срабатывание сигнализации",
      user: 'Олег',
      user_pic: '../img/user.png',
      created_at:  '2020-07-28T10:40',
  },

  {
      id: "6",
      status: 100,
      event: "Срабатывание сигнализации",
      user: 'Олег',
      user_pic: '../img/user.png',
      created_at:  '2020-07-28T10:40',
  },

  {
      id: "7",
      status: 300,
      event: "Срабатывание сигнализации",
      user: 'Олег',
      user_pic: '../img/user.png',
      created_at:  '2020-07-28T10:40',
  },
];

let filterid = [];
  items.forEach(el => {
      if (el.id > 4) {
        filterid.push(el);
      }
    
});

let filterStatus = [];
filterid.forEach(el => {
    if (el.status === 100) {
      filterStatus.push(el);
    }
});

console.log(...filterStatus);
Ответ написан
Комментировать
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
разбиваем массив: отображаемые и многомерный массив отфильтрованных значений. соответственно вначале все значения в списке отображаемые, по мере применения фильтров переносим значения в отфильтрованные, при смене значения фильтра возвращаем отфильтрованные значения и фильтруем по новой
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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