I need to filter an array based on the data of the two different arrays. Below is the example and expected result.
let groupedProtocolFilterValues = [
["Risk score < 4"]
];
let groupedPatientFilterValues = [
["CARDIOLOGY B2 INTERN2 ADMIT PRIMARY TEAM", "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM"]
];
let events = [{
"_id": "5d087b842c3f77e7a0c674e5",
"alert": {
"title": "Risk score < 3",
"patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\r\r\nCARDIOMYOPATHY CONSULT"
},
"createdAt": "2019-06-18T05:49:56.402Z"
}, {
"_id": "5d087b842c3f77e7a0c674e6",
"alert": {
"title": "Risk score < 4",
"patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\r\r\nCARDIOMYOPATHY CONSULT"
},
"createdAt": "2019-06-18T05:49:56.402Z"
}, {
"_id": "5d087b842c3f77e7a0c674e7",
"alert": {
"title": "Risk score < 4",
"patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\r\r\nCARDIOMYOPATHY CONSULT"
},
"createdAt": "2019-06-18T05:49:56.402Z"
}, {
"_id": "5d087b842c3f77e7a0c674e8",
"alert": {
"title": "Risk score < 4",
"patientLocation": "CARDIOLOGY B1 INTERN1 ADMIT PRIMARY TEAM\r\r\nCARDIOMYOPATHY CONSULT"
},
"createdAt": "2019-06-18T05:49:56.402Z"
}];
Here i would like to filter 'event' array based on the data of 'groupedProtocolFilterValues' and 'groupedPatientFilterValues'. So looking at the current data expected result should be
events = [{
"_id": "5d087b842c3f77e7a0c674e6",
"alert": {
"title": "Risk score < 4",
"patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\r\r\nCARDIOMYOPATHY CONSULT"
},
"createdAt": "2019-06-18T05:49:56.402Z"
}, {
"_id": "5d087b842c3f77e7a0c674e7",
"alert": {
"title": "Risk score < 4",
"patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\r\r\nCARDIOMYOPATHY CONSULT"
},
"createdAt": "2019-06-18T05:49:56.402Z"
}];
I want to check if any of the "events" array element contains "Risk score < 4" and "CARDIOLOGY B2 INTERN2 ADMIT PRIMARY TEAM" or "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM".
In short i need to apply below filtration condition:
ANDING BETWEEN 'groupedPatientFilterValues/groupedProtocolFilterValues'
ORING WITHIN 'groupedPatientFilterValues' AND 'groupedProtocolFilterValue'
It's not needed to use lodash for this task, .filter
will do the work:
let groupedProtocolFilterValues = [ ["Risk score < 4"] ]; let groupedPatientFilterValues = [ ["CARDIOLOGY B2 INTERN2 ADMIT PRIMARY TEAM", "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM"] ]; let flattenedProtocols = groupedProtocolFilterValues.reduce((res, cur) => res = res.concat(cur), []); let flattenedLocations = groupedPatientFilterValues.reduce((res, cur) => res = res.concat(cur), []); let events = [{ "_id": "5d087b842c3f77e7a0c674e5", "alert": { "title": "Risk score < 3", "patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\\r\\r\\nCARDIOMYOPATHY CONSULT" }, "createdAt": "2019-06-18T05:49:56.402Z" }, { "_id": "5d087b842c3f77e7a0c674e6", "alert": { "title": "Risk score < 4", "patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\\r\\r\\nCARDIOMYOPATHY CONSULT" }, "createdAt": "2019-06-18T05:49:56.402Z" }, { "_id": "5d087b842c3f77e7a0c674e7", "alert": { "title": "Risk score < 4", "patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\\r\\r\\nCARDIOMYOPATHY CONSULT" }, "createdAt": "2019-06-18T05:49:56.402Z" }, { "_id": "5d087b842c3f77e7a0c674e8", "alert": { "title": "Risk score < 4", "patientLocation": "CARDIOLOGY B1 INTERN1 ADMIT PRIMARY TEAM\\r\\r\\nCARDIOMYOPATHY CONSULT" }, "createdAt": "2019-06-18T05:49:56.402Z" }]; const result = events.filter(x => { return (!flattenedProtocols.length || flattenedProtocols.indexOf(x.alert.title) >= 0) && (!flattenedLocations.length || flattenedLocations.some(c => x.alert.patientLocation.includes(c))); }); console.log(result);
Instead of lodash, use filter
.
let groupedProtocolFilterValues = [ ["Risk score < 4"] ]; let groupedPatientFilterValues = [ ["CARDIOLOGY B2 INTERN2 ADMIT PRIMARY TEAM", "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM"] ]; let events = [{ "_id": "5d087b842c3f77e7a0c674e5", "alert": { "title": "Risk score < 3", "patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\\r\\r\\nCARDIOMYOPATHY CONSULT" }, "createdAt": "2019-06-18T05:49:56.402Z" }, { "_id": "5d087b842c3f77e7a0c674e6", "alert": { "title": "Risk score < 4", "patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\\r\\r\\nCARDIOMYOPATHY CONSULT" }, "createdAt": "2019-06-18T05:49:56.402Z" }, { "_id": "5d087b842c3f77e7a0c674e7", "alert": { "title": "Risk score < 4", "patientLocation": "CARDIOLOGY CHF INTERN2 ADMIT PRIMARY TEAM\\r\\r\\nCARDIOMYOPATHY CONSULT" }, "createdAt": "2019-06-18T05:49:56.402Z" }, { "_id": "5d087b842c3f77e7a0c674e8", "alert": { "title": "Risk score < 4", "patientLocation": "CARDIOLOGY B1 INTERN1 ADMIT PRIMARY TEAM\\r\\r\\nCARDIOMYOPATHY CONSULT" }, "createdAt": "2019-06-18T05:49:56.402Z" }]; const output = events.filter(({ alert: { title, patientLocation } }) => { return groupedProtocolFilterValues[0].includes(title) && groupedPatientFilterValues[0].some((val) => { const patientLocationName = patientLocation.split('\\n')[0]; return val.trim().includes(patientLocationName.trim()); }); }); console.log(output);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.