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);

函数功能

  1. 数据扁平化:medications 对象中的所有药物记录扁平化到一个数组 records 中。
  2. 按溶剂分类:records 数组根据 solvent 属性分成两个数组:solventTrueRecordssolventFalseRecords
  3. 汇总剂量: 使用 reduce() 方法对每个药物记录进行处理,将相同药物、相同日期的剂量汇总,并根据时间段(上午、下午、晚上)进行分类。
  4. 格式化输出: 将汇总后的数据格式化为一个包含 medicineNamedatessolvent 属性的对象数组。

使用方法

首先,你需要准备一个包含药物数据的对象 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 的详细信息,包括 medicationInfomedicineTypeorderClassmorningnooningevening 等属性。
  • 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 函数来格式化和处理药物数据。

JavaScript 函数:格式化药物数据并按溶剂分类

原文地址: https://www.cveoy.top/t/topic/oUqP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录