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,
}));
console.log('finalResultsTrue:', finalResultsTrue);
console.log('finalResultsFalse:', finalResultsFalse);
return [...finalResultsTrue, ...finalResultsFalse];
}
该函数执行以下操作:
- 扁平化数据: 将药物数据数组扁平化,以便能够轻松地过滤和处理每个记录。
- 按溶剂属性分类: 将记录根据溶剂属性 (
solvent) 分成两组。 - 处理每个记录: 对每个记录进行处理,将数据按照药物名称、日期和时间进行分组,并将每个时间段的剂量进行累加。
- 生成最终结果: 将处理后的数据转换为包含药物名称、日期、时间段剂量和溶剂属性的数组。
如何在控制台中输出 finalResultsTrue 和 finalResultsFalse?
您可以使用 console.log() 方法在控制台中输出这两个数组。在上面的代码中,我已经将 console.log() 方法添加到函数的末尾,以便在函数执行后输出这两个数组的内容。
例如,如果您有一个包含药物数据的数组 medications,您可以使用以下代码调用该函数:
const medications = [/* your medication data */];
const formattedData = formatMedicationData(medications);
这将调用 formatMedicationData() 函数并将结果存储在 formattedData 变量中。然后,您可以使用 console.log(formattedData) 在控制台中输出结果。
原文地址: https://www.cveoy.top/t/topic/oUqZ 著作权归作者所有。请勿转载和采集!