js 判断对多个版本进行排序怎么做

1.现在存在一组版本号,[1.1.4-60_dev, 1.1.4-60_rel, 1.1.4-70_dev,1.0.4-4_dev, 1.1.5-1_dev],怎么对这个版本号进行排序,实现最后排序的结果为[1.1.5-1_dev,1.1.4-70_dev, 1.1.4-60_rel,1.1.4-60_dev,1.0.4-4_dev];不知道各位大神有什么好的实现方法?

阅读 2.1k
1 个回答

把版本号里的数字进行权重相加,然后再排序。

进行权重后的相加,主要是考虑1.1.10应当比1.1.5要大,如果按照纯字符串比较的话,那么就会得到相反的结果。

在给到的例子里,如1.1.4-60_dev,这里一共有4个数字,有1,1,4,60,权重分别是10000, 100, 1, 0.001,即

1*10000 + 1*100 + 4*1 + 60*0.001 = 10104.06

然后按照按照得到之后的结果进行排序即可!如果数字相同的,再按照最后的英文版本排序!

var arr = ['1.1.4-60_dev', '1.1.4-60_rel', '1.1.4-70_dev','1.0.4-4_dev', '1.1.5-1_dev'];

function versionSort(versions) {
    const getWeight = (version)=>{
        let [match, major, minor, patch, mini, env] = version.match(/(\d+).(\d+).(\d+)-(\d+)_(.*)/) || ['', 0, 0, 0, ''];

        return {
            weight: Number(major)*10000 + Number(minor)*100 + Number(patch) + Number(mini)*0.001,
            env: env
        }
    }

    return versions.sort((x, y) => {
        let xversion = getWeight(x);
        let yversion = getWeight(y);

        return xversion.weight!==yversion.weight ? (xversion.weight > yversion.weight ? -1: 1) : (xversion.env>yversion.env ? -1: 1);
    })
}
console.log(versionSort(arr));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题