RomanDillerNsk
@RomanDillerNsk
JavaScript

Как сделать фильтрацию массива с объектами?

Надо отфильтровать массив по объекту:

const arr = [
  {
    "id" : 1,
    "city" : "Москва",
    "title" : "ООО Мавзолей",
    "type" : ["носки", "аромат"]
  },
  {
    "id" : 2,
    "city" : "Татарск",
    "title" : "ООО Татарск Продакс",
    "type" : ["коровы", "ЖБ плиты"]
  }
];

const filter = {
	city: `Татарск`,
	title: ``,
	type: `коровы`
};
  • Вопрос задан
  • 154 просмотра
Решения вопроса 2
E1ON
@E1ON Куратор тега JavaScript
Programming, Gamedev, VR
Вы хотя бы ошибки в своём коде исправьте раз просите помощи.

const arr = [
  {
    id : 1,
    city : "Москва",
    title : "ООО Мавзолей",
    type : ["носки", "аромат"]
  },
  {
    id : 2,
    city : "Татарск",
    title : "ООО Татарск Продакс",
    type : ["коровы", "ЖБ плиты"]
  }
];

const filter = {
  city: `Татарск`,
  title: ``,
  type: `коровы`
};

const data = arr.filter(item => {
  const title = filter.title === "" ? item.title : filter.title;
  return (item.city === filter.city && item.title === title && item.type.includes(filter.type)) ? item : null;
});

console.log(data);
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
const comparators = [
  [ 'city', (itemVal, filterVal) => itemVal === filterVal ],
  [ 'title', (itemVal, filterVal) => itemVal.includes(filterVal) ],
  [ 'type', (itemVal, filterVal) => itemVal.includes(filterVal) ],
];


const filteredArr = arr.filter(n => comparators.every(([ k, f ]) => f(n[k], filter[k])));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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