从数组中获取最新次要版本的数组
Get array of latest minor versions from array
我有这个 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.6.2', '4.7.1', '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.5.2', '4.5.2', '4.6.1', '4.6.2', '4.6.2', '4.7.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.6.2', '4.7.1', '4.8.1']
。
请注意, 如果您的 versions
数组包含预发布 and/or 构建元数据,例如 1.2.3-beta
、1.2.3+456
或 1.2.3.beta+456
,这 可能 无法按预期工作:我建议测试那些边缘情况。
我有这个 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.6.2', '4.7.1', '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.5.2', '4.5.2', '4.6.1', '4.6.2', '4.6.2', '4.7.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.6.2', '4.7.1', '4.8.1']
。
请注意, 如果您的 versions
数组包含预发布 and/or 构建元数据,例如 1.2.3-beta
、1.2.3+456
或 1.2.3.beta+456
,这 可能 无法按预期工作:我建议测试那些边缘情况。