|
|
- /**
- * 判断单位是否属于同一系列
- * @param {string} startUnit - 基准单位
- * @param {Array<string>} 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;
- };
|