Last active
June 19, 2020 00:03
-
-
Save killertilapia/8a703cdd60c47731d9370d8550851146 to your computer and use it in GitHub Desktop.
recursive filter for lists; Is this any good?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface FilterListEntry { | |
listId: String, | |
name?: String | |
} | |
export class test_filter_class{ | |
// unfilterCompanies = [comp_ids] | |
// eg. unfilterCompanies = [123,456,789] | |
private apply_filter = async (filterInfo: Array<FilterListEntry>, unfilterCompanies: any) => { | |
if(filterInfo.length == 1){ | |
let filterInfoEntry = filterInfo.pop(); | |
let filterList = await MailingListCompany.find({ "mailingList": filterInfoEntry.listId }) | |
.lean(); | |
let filterData = await MailingList.findById(filterList[0].mailingList); | |
let theFilter = filterList.map((e) => { return e.company }); | |
let yesInFilter = unfilterCompanies.filter((el) => theFilter.includes(el._id)); | |
let notInFilter = unfilterCompanies.filter((el) => !theFilter.includes(el._id)); | |
yesInFilter.forEach((e) => { | |
e[`${filterData.name} filter`] = true | |
}); | |
return [...yesInFilter, ...notInFilter] | |
} else { | |
let filterInfoEntry = filterInfo.pop(); | |
let filterList = await MailingListCompany.find({ "mailingList": filterInfoEntry.listId }) | |
.lean(); | |
let filterData = await MailingList.findById(filterList[0].mailingList); | |
let theFilter = filterList.map((e) => { return e.company }); | |
let yesInFilter = unfilterCompanies.filter((el) => theFilter.includes(el._id)); | |
let notInFilter = unfilterCompanies.filter((el) => !theFilter.includes(el._id)); | |
yesInFilter.forEach((e) => { | |
e[`${filterData.name} filter`] = true | |
}); | |
return this.apply_filter(filterInfo, [...yesInFilter, ...notInFilter]) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If the code inside the if..else are similar except for the return, perhaps rewrite it to this?