Javascript 从数组中获取最新次要版本的数组

Javascript 从数组中获取最新次要版本的数组,javascript,arrays,semantic-versioning,Javascript,Arrays,Semantic Versioning,我有一系列semver版本: let版本=['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.6.2', '4.7.1', '4.8.1'] 我尝试在两个循环中检查每个版本,比较主要版本和次要版本,但每次在最终数组中都有重复版本和较低版本 我的代码: for(let版本的supp

我有一系列semver版本:

let版本=['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.6.2', '4.7.1', '4.8.1']
我尝试在两个循环中检查每个版本,比较主要版本和次要版本,但每次在最终数组中都有重复版本和较低版本


我的代码:

for(let版本的supportedReleaseList){
for(让我们双重检查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(版本);
}
}
}
}
}
结果是:

['4.5.1', '4.5.2', '4.5.2', '4.6.1', '4.6.2', '4.6.2', '4.7.1', '4.8.1']


我会这样做。无论输入列表是否有序,它都将工作:

const semver=require('semver');
常量版本=[
'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=新映射();
for(versions.map(semver.parse)的常量v){
const baseVersion=new semver.semver(`${v.major}.${v.minor}.0`).toString();
如果(!latestMinorVersions.has(baseVersion)){
latestMinorVersions.set(baseVersion,v);
}
const maxVersion=latestMinorVersions.get(baseVersion);
const cc=maxVersion.compare(v);
if(cc<0){
latestMinorVersions.set(baseVersion,v);
}
}
log(Array.from(latestMinorVersions.values()).map(v=>v.toString());
它生成所需的
['4.5.2','4.6.2','4.7.1','4.8.1']


请注意如果您的
版本
数组包含预发布和/或构建元数据,如
1.2.3-beta
1.2.3+456
1.2.3.beta+456
,这可能无法按预期工作:我建议测试这些边缘情况。

列表是否已排序?