首页 > 解决方案 > 使用 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

标签: javascriptlodash

解决方案


不需要使用 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);


推荐阅读