可以在processRecord函数中添加一个数组,用于存放每个药品的dosage值,然后将这个数组放到相应的药品的每个日期对象中。修改后的代码如下:

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,
    solvent
  } = medication
  const date = medicationDate.split(' ')[0]
  const medicationInfo = acc[medicineName]?.[date]?.medicationInfo || medication.medicationInfo
  const medicineType = acc[medicineName]?.[date]?.medicineType || medication.medicineType
  const hour = Number(medicationDate.split(' ')[1].split(':')[0])
  // 判断早中晚的
  const timeOfDay = hour >= 6 && hour < 12 ? 'morning' : hour >= 12 && hour < 18 ? 'nooning' : 'evening'
  const dosageArr = acc[medicineName]?.[date]?.dosageArr || []
  const medicationInfoObj = {
    medicationInfo,
    medicineType,
    dosageArr: [...dosageArr, dosage],
    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
}))

现在,每个药品的日期对象中都有一个dosageArr数组,用于存放该药品每次用药的剂量值


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

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