14
Сен
2021

Поиск по вложенному массиву. TS

Нужно реализовать функцию, которая на вход принимает два массива и фильтрует первый согласно второму по заданным правилам.

Примеры:

Массив, который нужно отфильтровать
const response = [
  {
    name: {
      first: 'TestFirst',
      last: 'TestLast2',
    },
    },
    goal: 'goal_1',
    isTrue: true,
  },
  {
    name: {
      first: 'TestFirst2',
      last: 'TestLast2',
    },
    goal: 'goal_2',
    isTrue: true,
  },
];
Массив с фильтрами
const filter = [
  {
    property: 'name.first',
    in_values: ['TestFirst', 'TestFirst2'],
  },
  {
    property: 'name.last',
    not_in_values: ['TestLast2'],
  },
  {
    property: 'goal',
    in_values: ['goal_1', 'goal_2'],
  },
  {
    property: 'isTrue',
    in_values: [true],
  },
];
Результирующий массив
const result = [
  {
    name: {
      first: 'Test',
      last: 'Test',
    },
    goal: 'goal_1',
    isTrue: true,
  },
];

property - поле, которое нужно проверить.

in_values - массив значений. Если есть хоть одно совпадение, тогда запись попадает в результирующий массив

not_in_values - массив значений. Если есть хоть одно совпадение, тогда запись НЕ попадает в результирующий массив

Если все "правила" фильтрации были применены успешно, тогда запись попадает в результирующий массив.

Вложенность может быть любая. Требуется универсальное решение. В response могут попасть объекты не только из примера. Внутри массива объекты одинаковой структуры.

Источник: https://ru.stackoverflow.com/questions/1328390/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA-%D0%BF%D0%BE-%D0%B2%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC%D1%83-%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D1%83-ts

Тебе может это понравится...

Добавить комментарий