Фильтрация массива на основе данных из двух разных массивов с использованием lodash - PullRequest
0 голосов
/ 18 июня 2019

Мне нужно отфильтровать массив на основе данных двух разных массивов. Ниже приведен пример и ожидаемый результат.

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"
}];

Здесь я хотел бы отфильтровать массив 'event' на основе данных '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"
}];

Я хочу проверить, содержит ли какой-либо элемент массива «events» «Оценка риска <4» и «КАРДИОЛОГИЯ B2 ВНУТРЕННЯЯ КОМАНДА В2» или «КАРДИОЛОГИЯ CHF INTERN2 ВСТУПИТЬ В ПЕРВИЧНУЮ КОМАНДУ». </p>

Короче говоря, мне нужно применить условия фильтрации ниже:

ANDING МЕЖДУ 'groupedPatientFilterValues ​​/ groupedProtocolFilterValues'

ORING WITHIN 'groupedPatientFilterValues' И 'groupedProtocolFilterValue'

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Нет необходимости использовать 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);
0 голосов
/ 18 июня 2019

Вместо lodash используйте 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);
...