@Anton8989

Как создать фильтр для значения с массивом?

Добрый вечер. Необходимо создать фильтр по нескольким значениям, при этом чтобы значение могло быть массивом и можно было отфильтровать так же по каждому элементу массива.
На текущий момент есть такой вариант:
let filter = (fields, data) => {
      return data.filter(item => {
        return Object.keys(fields).every(key => {
          return fields[key].includes(item[key])
        })
      })
    }

filter(fields_contacts,  contacts)

 filter_fields: {
    organization: ''Организация",
    office: "777",
    post: "Директор"
  }

contacts: [
{
  id:1,
  organization: ''Организация1",
  office: "111",
  post: "Служащий"
},
{
  id:1,
  organization: ''Организация2",
  office: "777",
  post: "Директор"
},
{
  id:3,
  organization: ''Организация",
  office: "777",
  post: "Директор"
},
]

Данный фильтр отрабатывает верно, но необходимо, чтобы поиск был шири и искал не только по значению, а по массиву значений. Пример
fields_contacts: {
  organization: ['Организация1',  'Организация2'],
  office: ['777'],
  post: ['Служащий1', 'Служащий2']
}


Заранее спасибо))
  • Вопрос задан
  • 217 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const filter = (arr, conditions) =>
  arr.filter(
    function(n) {
      return this.every(([ k, values ]) => values.some(v => v.includes(n[k])));
    },
    Object
      .entries(conditions)
      .map(n => [ n[0], [].concat(n[1]).map(String) ])
      .filter(n => n[1].length)
  );
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
05 нояб. 2024, в 17:38
150000 руб./за проект
05 нояб. 2024, в 16:31
500 руб./за проект
05 нояб. 2024, в 16:24
5000 руб./за проект