Фильтровать мои данные массива / 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 повторяются много раз в каждом профиле.