微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从数组中获取最新的次要版本数组

我有这个 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-beta1.2.3+4561.2.3.beta+456,则此 可能无法按预期工作:我建议测试这些边缘情况。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。