JavaScript 函数:格式化药物数据并按溶剂分类
JavaScript 函数:格式化药物数据并按溶剂分类
本函数用于格式化药物数据,并将数据按溶剂属性进行分类。
function formatMedicationData(medications) {
const records = Object.values(medications).flat();
const solventTrueRecords = records.filter(record => record.solvent === true);
const solventFalseRecords = records.filter(record => record.solvent === false);
const processRecord = (acc, medication) => {
const { medicationDate, medicineName, dosage, orderClass, solvent } = medication;
const date = medicationDate.split(' ')[0];
const medicationInfo = acc[medicineName]?.[date]?.medicationInfo || medication.medicationInfo;
const medicineType = acc[medicineName]?.[date]?.medicineType || medication.medicineType;
const orderClassVal = acc[medicineName]?.[date]?.orderClass || medication.orderClass;
const hour = Number(medicationDate.split(' ')[1].split(':')[0]);
const timeOfDay = hour >= 6 && hour < 12 ? 'morning'
: hour >= 12 && hour < 18 ? 'nooning'
: 'evening';
const medicationInfoObj = {
medicationInfo,
medicineType,
orderClass: orderClassVal,
morning: acc[medicineName]?.[date]?.morning || 0,
nooning: acc[medicineName]?.[date]?.nooning || 0,
evening: acc[medicineName]?.[date]?.evening || 0,
[timeOfDay]: (acc[medicineName]?.[date]?.[timeOfDay] || 0) + dosage,
};
if (!acc[medicineName]) {
acc[medicineName] = {};
}
if (!acc[medicineName][date]) {
acc[medicineName][date] = medicationInfoObj;
} else {
acc[medicineName][date] = { ...acc[medicineName][date], ...medicationInfoObj };
}
return acc;
};
const resultsTrue = solventTrueRecords.reduce(processRecord, {});
const resultsFalse = solventFalseRecords.reduce(processRecord, {});
const finalResultsTrue = Object.entries(resultsTrue)
.map(([medicineName, dates]) => ({
medicineName,
...dates,
solvent: true,
}));
const finalResultsFalse = Object.entries(resultsFalse)
.map(([medicineName, dates]) => ({
medicineName,
...dates,
solvent: false,
}));
return [...finalResultsTrue, ...finalResultsFalse];
}
// 打印输出结果
console.log(finalResultsTrue);
console.log(finalResultsFalse);
函数功能
- 数据扁平化: 将
medications对象中的所有药物记录扁平化到一个数组records中。 - 按溶剂分类: 将
records数组根据solvent属性分成两个数组:solventTrueRecords和solventFalseRecords。 - 汇总剂量: 使用
reduce()方法对每个药物记录进行处理,将相同药物、相同日期的剂量汇总,并根据时间段(上午、下午、晚上)进行分类。 - 格式化输出: 将汇总后的数据格式化为一个包含
medicineName、dates和solvent属性的对象数组。
使用方法
首先,你需要准备一个包含药物数据的对象 medications。该对象应该包含多个药物记录,每个药物记录包含以下属性:
medicationDate:药物服用时间(例如:'2023-10-26 10:00')medicineName:药物名称dosage:剂量orderClass:药物类别solvent:是否为溶液medicationInfo:其他药物信息medicineType:药物类型
然后,将 medications 对象作为参数传入 formatMedicationData() 函数,即可获得格式化后的药物数据。
示例
const medications = {
'drug1': [
{ medicationDate: '2023-10-26 10:00', medicineName: 'drug1', dosage: 10, orderClass: 'oral', solvent: true, medicationInfo: '...', medicineType: '...' },
{ medicationDate: '2023-10-26 15:00', medicineName: 'drug1', dosage: 15, orderClass: 'oral', solvent: true, medicationInfo: '...', medicineType: '...' },
{ medicationDate: '2023-10-27 09:00', medicineName: 'drug1', dosage: 12, orderClass: 'oral', solvent: true, medicationInfo: '...', medicineType: '...' },
],
'drug2': [
{ medicationDate: '2023-10-26 11:00', medicineName: 'drug2', dosage: 5, orderClass: 'injection', solvent: false, medicationInfo: '...', medicineType: '...' },
{ medicationDate: '2023-10-27 17:00', medicineName: 'drug2', dosage: 7, orderClass: 'injection', solvent: false, medicationInfo: '...', medicineType: '...' },
]
};
const formattedData = formatMedicationData(medications);
console.log(formattedData);
输出结果
formattedData 变量将包含一个格式化的数组,每个元素代表一个药物,包含以下属性:
medicineName:药物名称2023-10-26:包含该药物在 2023-10-26 的详细信息,包括medicationInfo、medicineType、orderClass、morning、nooning、evening等属性。solvent:是否为溶液
例如,formattedData 数组可能包含以下元素:
[
{
'medicineName': 'drug1',
'2023-10-26': {
'medicationInfo': '...',
'medicineType': '...',
'orderClass': 'oral',
'morning': 10,
'nooning': 15,
'evening': 0,
'solvent': true
},
'2023-10-27': {
'medicationInfo': '...',
'medicineType': '...',
'orderClass': 'oral',
'morning': 12,
'nooning': 0,
'evening': 0,
'solvent': true
}
},
{
'medicineName': 'drug2',
'2023-10-26': {
'medicationInfo': '...',
'medicineType': '...',
'orderClass': 'injection',
'morning': 0,
'nooning': 5,
'evening': 0,
'solvent': false
},
'2023-10-27': {
'medicationInfo': '...',
'medicineType': '...',
'orderClass': 'injection',
'morning': 0,
'nooning': 0,
'evening': 7,
'solvent': false
}
}
]
注: 以上代码示例仅供参考,实际应用中你需要根据具体情况调整 medications 对象和 formatMedicationData() 函数的逻辑。
希望本文能够帮助你更好地理解和应用 JavaScript 函数来格式化和处理药物数据。
原文地址: https://www.cveoy.top/t/topic/oUqP 著作权归作者所有。请勿转载和采集!