题目描述
Semantic Versioning 是一个前端通用的版本规范。格式为“{MAJOR}.{MINOR}.{PATCH}-{alpha|beta|rc}.{number}”,要求实现 compare(a, b) 方法,比较 a, b 两个版本大小
1. 当 a > b 是返回 1;
2. 当 a = b 是返回 0;
3. 当 a < b 是返回 -1;
4. 其中,rc > beta > alpha,major > minor > patch;
5. 例子,1.2.3 < 1.2.4 < 1.3.0-alpha.1 < 1.3.0-alpha.2 < 1.3.0-beta.1 < 1.3.0-rc.1 < 1.3.0
题解
const tempArr = ['1.3.0-rc', '1.3.0-beta.1','1.3.0', '1.2.3', '1.3.0-rc.1','1.3.0-alpha.2', '1.2.13', '1.3.0-alpha.1' ];function compareVersion(v1, v2) {const versionReg = /(\d+)\.(\d+)\.(\d+)(-(alpha|beta|rc)(\.(\d+))?)?/;const regIndex = [1, 2, 3, 5, 7]; // major minor patch stage stageNumconst v1Result = versionReg.exec(v1);const v2Result = versionReg.exec(v2);let res = 0;regIndex.find(index => {let diff;if(index !== 5) {diff = (v1Result[index] ?? 0) - (v2Result[index] ?? 0);} else {diff = (v1Result[index]?.[0] ?? 'z').charCodeAt() - (v2Result[index]?.[0] ?? 'z').charCodeAt();}if(diff) {res = diff > 0 ? 1 : -1;return true;}})return res;}console.log(tempArr.sort(compareVersion).join(' < '));
