JS练习题-版本号的比较

96 阅读1分钟

给你两个版本号 version1和 version2,请你比较它们。

版本号由一个或多个修订号组成,各修订号由一个连接。每个修订号由 多位数字 组成,可能包含 前导零。

每个版本号至少包含一个字符修订号从左到右编号,下标从0开始,最左边的修订号下标为 0,下个修订号下标为1

以此类推。例如,2.5.33 和 01 都是有效的版本号

比较版本号时,请按从左到右的顺序依次比较它们的修订号。

比较修订号时,只需比较 忽略任何前导零后的整数值。也就是说,修订号1和修订号001 相等。

如果版本号没有指定某个下标处的修订号,则该修订号视为0。

例如,版本1.0小于版本1.1,因为它们下标为0的修订号相同,而下标为1的修订号分别为0和1,0<1。

返回规则如下.

如果 version1 > version2 返回1

如果 version1 < version2 返回-1

除此之外返回 0。

1.暴力解法

        function compareVersion(version1, version2) {
            const newVersion1 = `${version1}`.split('.').length < 3 ? `${version1}`.concat('.0') : `${version1}`;
            const newVersion2 = `${version2}`.split('.').length < 3 ? `${version2}`.concat('.0') : `${version2}`;
            //计算版本号大小,转化大小
            // 将不满足 4位数的 修订号 补齐
            function toNum(a) {
                const c = a.toString().split('.');
                const num_place = ["", "0", "00", "000", "0000"], r = num_place.reverse();
                for (let i = 0; i < c.length; i++) {
                    const len = c[i].length; 
                    c[i] = r[len] + c[i];
                }
                return c.join('');
            }
            //检测版本号是否需要更新
            function checkPlugin(a, b) {
                const numA = toNum(a);
                const numB = toNum(b);
                return numA > numB ? 1 : numA < numB ? -1 : 0;
            }
            return checkPlugin(newVersion1, newVersion2);
        }
        console.log(compareVersion('0.1', '1.1.1.1')) // 返回-1
        console.log(compareVersion('13.37', '1.2'))// 返回1
        console.log(compareVersion('1.1', '1.1.0')); // 返回0

2.优化方案padStart


 //计算版本号大小,转化大小
 
    function toNum(a) {
        const c = a.toString().split('.');
        const num_place = []
        c.forEach(element => {
            num_place.push( element.padStart(4, '0') )
        })
        return num_place.join('');
    }