gpt4 book ai didi

javascript - 简化 semver 版本比较逻辑

转载 作者:搜寻专家 更新时间:2023-11-01 00:48:28 32 4
gpt4 key购买 nike

有标准的 npm semver 版本比较库,但我有一些简单的逻辑来比较 semver 版本:

const versionA = '14.8.3';
const versionB = '15.1.1';
const versionC = '15.1.2';

const semver = require('semver');
const assert = require('assert');

const isGreater = (a, b) => {

const [majorA, minorA, patchA] = String(a).split('.').map(v => Number.parseInt(v));
const [majorB, minorB, patchB] = String(b).split('.').map(v => Number.parseInt(v));


if (majorA > majorB) {
return true;
}

if (majorB > minorA) {
return false;
}

if (minorA > minorB) {
return true;
}

if (minorB > minorA) {
return false;
}

if (patchA > patchB) {
return true;
}

if (patchB > patchA) {
return false;
}

return false;

};


assert(isGreater(versionB, versionA), 'version b should be greater.');
assert(isGreater(versionA, versionB), 'version b should be greater.');

我的问题是 - 有没有办法简化 greaterThan 函数中的逻辑?此函数应该复制 semver.gt() 中的逻辑。

最佳答案

您可以使用 localeCompare 代替,使用 numeric 选项(对于 numeric,比较是这样的 "1"< "2"< "10"),这正是您正在寻找的逻辑:

const versionA = '14.8.3';
const versionB = '15.1.1';
const versionC = '15.1.2';
const versionD = '15.1.10';
const versionE = '15.2.1';
const versionF = '15.11.1';

const isGreater = (a, b) => {
return a.localeCompare(b, undefined, { numeric: true }) === 1;
};

// first argument version comes later than second argument:
console.log(isGreater(versionB, versionA));
console.log(isGreater(versionC, versionB));
console.log(isGreater(versionD, versionC));
console.log(isGreater(versionE, versionD));
console.log(isGreater(versionF, versionE));

console.log('---');

// second comes before first:
console.log(isGreater(versionA, versionB));

// same, return value should be false:
console.log(isGreater(versionA, versionA));

或者,等效地,您可以传递语言环境字符串

en-US-u-kn-true

作为第二个参数而不是 { numeric: true }

关于javascript - 简化 semver 版本比较逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55466274/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com