@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']
}


Заранее спасибо))
  • Вопрос задан
  • 195 просмотров
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F Куратор тега JavaScript
const filter = (arr, conditions) =>
  arr.filter(function(item) {
    return this.every(([ k, v ]) => (Array.isArray(v) ? v : [ v ]).some(n => n.includes(item[k])));
  }, Object.entries(conditions));
Ответ написан
Ваш ответ на вопрос

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

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