/** * 判断单位是否属于同一系列 * @param {string} startUnit - 基准单位 * @param {Array} units - 需要比较的单位数组 * @returns {boolean} 是否属于同一系列 */ export const isCommonUnit = (startUnit, units) => { if (!startUnit || !Array.isArray(units) || units.length === 0) { return false; } // 提取单位分子部分(斜杠前的部分) const extractNumerator = (unit) => { const normalizedUnit = unit .replace('ug', 'μg') .replace('umol', 'μmol') .replace('IU', 'U'); if (!normalizedUnit.includes('/')) { return null; // 不是浓度单位 } const [numerator] = normalizedUnit.split('/'); return numerator; }; // 标准化分子部分,识别类别 const classifyNumerator = (numerator) => { // 质量单位 const massUnits = ['mg', 'μg', 'ng', 'pg', 'fg', 'g']; if (massUnits.some(massUnit => numerator.includes(massUnit))) { return 'mass'; } // 摩尔单位 const moleUnits = ['mol', 'mmol', 'μmol', 'nmol', 'pmol']; if (moleUnits.some(moleUnit => numerator.includes(moleUnit))) { return 'mole'; } // 酶活性单位 const enzymeUnits = ['U', 'IU']; if (enzymeUnits.some(enzymeUnit => numerator.includes(enzymeUnit))) { return 'enzyme'; } return 'other'; }; // 获取基准单位的分子类别 const startNumerator = extractNumerator(startUnit); if (!startNumerator) { console.warn(`基准单位 ${startUnit} 不是有效的浓度单位格式`); return false; } const startCategory = classifyNumerator(startNumerator); // 检查所有单位 for (const unit of units) { const numerator = extractNumerator(unit); if (!numerator) { console.log(`单位 ${unit} 不是有效的浓度单位格式`); return false; } const category = classifyNumerator(numerator); if (category !== startCategory) { console.log(`单位 ${unit} 属于 ${category} 类别,与基准 ${startCategory} 类别不同`); return false; } } return true; };