mulgey Ответов: 0

Фильтровать мои данные массива / JSON на основе нескольких критериев в javascript?


Эй там,

Я хочу, чтобы люди могли искать в базе данных статей с несколькими критериями. Это немного по-другому, чтобы справиться, потому что:

Некоторые включают в себя более 1 значения (например, активные вещества: ["actSubst1", "actSubs2"])
Некоторые значения являются повторяющиеся (ретроспектива: "1" для "True; ward_focused: "1" для истинных (опять))
Вот мои данные, все в порядке, если вы преобразуете их в массив и работаете над ними,

формат JSON
[
 {
  "title": "Real-world evidence of high-cost drugs for metastatic melanoma",
  "url": "https://.../Suppl_1/A5.1",
  "filters": {
    "retrospective": "1",
    "ward_focused": "2",
    "indication_focused": "1",
    "active_substance": "2"
  }
 },
 {
  "title": "Real-world safety and tolerability of the recently commercialised palbociclib",
  "url": "https://.../Suppl_1/A223.2",
  "filters": {
    "retrospective": "2",
    "ward_focused": "1",
    "indication_focused": "2",
    "active_substance": "Palbociclib"
  }
 },
 {
  "title": "Cost-effectiveness of morphine versus fentanyl in managing ventilated neonates",
  "url": "https://.../Suppl_1/A7.3",
  "filters": {
    "retrospective": "1",
    "ward_focused": "1",
    "indication_focused": "1",
    "active_substance": ["Morphine", "Fentanyl"]
  }
 },
 {
  "title": "Chemical risk assessement in a quality control laboratory",
  "url": "https://.../Suppl_1/A9.2",
  "filters": {
    "retrospective": "2",
    "ward_focused": "2",
    "indication_focused": "2",
    "active_substance": "2"
  }
 },
 {
  "title": "The economic burden of metastatic breast cancer in Spain",
  "url": "https://.../27/1/19",
  "filters":{
    "retrospective": "1",
    "ward_focused": "1",
    "indication_focused": "1",
    "active_substance": "2"
  }
 }
]


А вот и моя запрос:

const selectedFilters = {
      retrospective: ["1"],
      ward_focused: ["2"],
      indication_focused: ["1"],
      active_substance: []
  };


Простые решения не работали по этим двум причинам:

Я использую ["1"] и ["2"] для булевых данных, одно и то же значение (например, ["1"]) повторяется внутри профиля,
Может быть несколько значений ( например, "active_substance": ["морфин", "фентанил"] )
Я открыт для работы как с JSON, так и с массивом для моих данных. Кроме того, я могу изменить структуру "1" -"2" для моих логических типов данных. Вы также можете изменить структуру данных, если это необходимо, удалив детали “фильтров” и работая на одной глубине.

Любая помощь ощутима. С уважением

Что я уже пробовал:

Самое близкое решение было, когда я преобразовал свои данные в массив и работал над ним как:

const filterArr = Object.values(selectedFilters).flat();

const output = myDataArray.filter(({filters}) => {
    const objFilters = Object.values(filters).flat();
    return filterArr.every(val => objFilters.includes(val));
})
console.log(output);


Но это не удалось по той причине, что "1"для " true" и "2"для false повторяются много раз в каждом профиле.

0 Ответов