javascript - 使用 lodash 根据来自两个不同数组的数据过滤数组
问题描述
我需要根据两个不同数组的数据过滤一个数组。以下是示例和预期结果。
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"
}];
在这里,我想根据“groupedProtocolFilterValues”和“groupedPatientFilterValues”的数据过滤“事件”数组。所以看当前数据预期的结果应该是
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"
}];
我想检查是否有任何“事件”数组元素包含“风险评分 < 4”和“心脏病学 B2 实习生入学初级团队”或“心脏病学 CHF 实习生2 入学初级团队”。
简而言之,我需要应用以下过滤条件:
ANDING BETWEEN 'groupedPatientFilterValues/groupedProtocolFilterValues'
在“groupedPatientFilterValues”和“groupedProtocolFilterValue”内进行 ORING
解决方案
不需要使用 lodash 来完成这项任务,它.filter
会完成这项工作:
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);
推荐阅读
- oracle-jet - Oracle JET:为 android 启动 ojet 混合应用程序时出错
- python - 不固定时的正则表达式
- postgresql - 获取特定数据以及所有数据 posgresql 查询
- php - 如何在 InstallData Magento 2 中添加多个属性
- javascript - 提前将 Vue 组件转换为 HTML
- prometheus - 在 Prometheus 中加入矩阵后如何找到平均执行时间
- r - 如何在factoextra包中更改列元素图贡献的y标签
- angular - 在 syncfusion/ej2-angular-layouts 中将 allowDragging 设置为 false 后,光标图标不会改变
- python - 在 Django 中调用 .delay() 后芹菜任务挂起
- jmeter - 我们如何在 Jmeter 的线程组中划分由不同负载执行的不同操作