如何解决从数组中获取最新的次要版本数组
我有这个 semver 版本数组:
let versions = ['4.5.0','4.5.1','4.5.2','4.6.0','4.6.1','4.6.2','4.7.0','4.7.1','4.8.0','4.8.1']
我想过滤这个数组,只保留基于次要和主要版本的最新补丁版本。
预期结果:
['4.5.2','4.8.1']
我尝试在比较主要和次要版本的两个循环中检查每个版本,但每次我在最终数组中都有重复和较低版本时。
我的代码:
for (let versions of supportedReleaseList) {
for (let doubleCheckVersion of supportedReleaseList) {
if (semver.parse(versions).major === semver.parse(doubleCheckVersion).major) {
if (semver.parse(versions).minor === semver.parse(doubleCheckVersion).minor) {
if (semver.parse(versions).patch > semver.parse(doubleCheckVersion).patch) {
finalList.push(versions);
}
}
}
}
}
结果是:
['4.5.1','4.8.1']
解决方法
我会做这样的事情。无论输入列表是否有序,它都会工作:
const semver = require('semver');
const versions = [
'4.5.0','4.5.1','4.5.2','4.6.0','4.6.1','4.6.2','4.7.0','4.7.1','4.8.0','4.8.1'
];
const latestMinorVersions = new Map();
for ( const v of versions.map( semver.parse ) ) {
const baseVersion = new semver.SemVer(`${v.major}.${v.minor}.0`).toString();
if ( !latestMinorVersions.has( baseVersion ) ) {
latestMinorVersions.set( baseVersion,v );
}
const maxVersion = latestMinorVersions.get( baseVersion );
const cc = maxVersion.compare( v );
if ( cc < 0 ) {
latestMinorVersions.set(baseVersion,v);
}
}
console.log(Array.from(latestMinorVersions.values()).map(v => v.toString()));
它产生所需的 ['4.5.2','4.8.1']
。
请注意如果您的 versions
数组包含预发布和/或构建元数据,例如 1.2.3-beta
、1.2.3+456
或 1.2.3.beta+456
,则此 可能无法按预期工作:我建议测试这些边缘情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。