Javascript 使用semver强制执行数组,对其排序,然后将其还原为强制执行前的对应数组

Javascript 使用semver强制执行数组,对其排序,然后将其还原为强制执行前的对应数组,javascript,node.js,npm,Javascript,Node.js,Npm,问题在于其不同的功能返回不同的输出: const semver=require(“semver”) 有效版本(“1.0.0”) //=> "1.0.0" 有效版本(“1.0.0”) //=>空 有效版本(“v1.0.0”) //=>空 semver.clean(“1.0.0”) //=> "1.0.0" semver.clean(“1.0.0”) //=> "1.0.0" semver.clean(“v1.0.0”) //=>空 semver.valid(semver.胁迫(“1.0.0”))

问题在于其不同的功能返回不同的输出:

const semver=require(“semver”)
有效版本(“1.0.0”)
//=> "1.0.0"
有效版本(“1.0.0”)
//=>空
有效版本(“v1.0.0”)
//=>空
semver.clean(“1.0.0”)
//=> "1.0.0"
semver.clean(“1.0.0”)
//=> "1.0.0"
semver.clean(“v1.0.0”)
//=>空
semver.valid(semver.胁迫(“1.0.0”))
//=> "1.0.0"
semver.valid(semver.胁迫(“1.0.0”))
//=> "1.0.0"
semver.valid(semver.胁迫(“v1.0.0”))
//=> "1.0.0"
我有一系列的版本需要:

  • 从空格
    “1.0.0”=>“1.0.0”
  • 强制(支持解析最复杂的版本输入)
  • 使用
    semver.rcompare进行排序
  • 除非已指定布尔值,否则将还原为其非强制对应项
  • 以下是一些需要满足的测试用例:

    convert([“1.0.0”、“3.0.0aa”、“v2.0.0”、“v0”],false)
    //=>[“3.0.0aa”、“v2.0.0”、“1.0.0”、“v0”]
    转换([“1.0.0”、“3.0.0aa”、“v2.0.0”、“v0”],真)
    //=> ["3.0.0", "2.0.0", "1.0.0", "0.0.0"]
    
    我认为这将是
    Map
    的一个很好的用例-因为它可以保存2对值,所以它可以在整个转换过程中存储版本的标识。然而,我不知道如何实现这一点


    关于GitHub问题还有一些额外的讨论。

    这里的最佳策略是使用类似于地图的数组结构:

    const semver=require('semver'))
    const cleanSemver=require('clean-semver'))
    module.exports=(版本,clean=true)=>{
    const sortedVersions=版本
    .map(版本=>version.trim())
    .map(版本=>[版本,清理器(版本)])
    .filter(版本=>版本[1])
    .sort((a,b)=>semver.rcompare(a[1],b[1]))
    如果(清洁){
    返回sortedVersions.map(版本=>版本[1])
    }
    返回sortedVersions.map(([version])=>version)
    };
    
    @jwdonahue这是javascript。