版本号比较如何在 JavaScript 中正常工作
How is version number comparison working correctly in JavaScript?
我能够在JavaScript中正确比较版本号,而无需拆分和检查每个十进制数字。它是如何工作的?
("2.0.1" > "2.1.0")
false
("2.2.1" > "2.1.0")
true
("2.5.1" > "2.0.5")
true
谢谢。
不,你无法"在 JavaScript 中正确比较版本号而不必拆分"
"2.2.8" > "2.2.10" // true
这些字符串从左到右逐个字符进行比较。
您确实需要逐个数字进行拆分和比较,这很容易。例如,您可以通过以下方式实现它:
function Version(s){
this.arr = s.split('.').map(Number);
}
Version.prototype.compareTo = function(v){
for (var i=0; ;i++) {
if (i>=v.arr.length) return i>=this.arr.length ? 0 : 1;
if (i>=this.arr.length) return -1;
var diff = this.arr[i]-v.arr[i]
if (diff) return diff>0 ? 1 : -1;
}
}
console.log((new Version("1.1.1")).compareTo(new Version("1.2.1"))); // -1
console.log((new Version("1.1.1")).compareTo(new Version("1.10.1"))); // -1
console.log((new Version("1.10.1.2")).compareTo(new Version("1.10.1"))); // 1
console.log((new Version("1.10.1.2")).compareTo(new Version("1.10.1.2"))); // 0
因为您正在按字典顺序比较字符串,这在您的示例中会产生相同的结果。但是,这并非在所有情况下都有效,例如当您达到两位数时:2.15.29
.
我知道
这很旧并且已经有一个标记的答案,但是下面的代码非常适合我使用localeCompare
。
该函数将返回以下任一内容:
0
:版本字符串相等1
:版本a
大于b
-1
:版本b
大于a
function sort(a, b){ return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' }) }
以上适用于angularJS和Javascript。localeCompare()
是所有浏览器都支持的 ES1 功能。
有关用法的更多详细信息,请参阅 - https://www.w3schools.com/jsref/jsref_localecompare.asp
更好的比较方法是创建一个版本号浮点数,然后创建一个子版本号,如下所示
subVersion = parseInt(fullVersion.split(".")[2]);
mainVersion = parseFloat(fullOsVer);
转换后,您可以进行比较。 此比较将比较两个整数。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作