这是软件版本号:
"1.0", "1.0.1", "2.0", "2.0.0.1", "2.0.1"
我怎么能比较这个?
假设正确的顺序是:
"1.0", "1.0.1", "2.0", "2.0.0.1", "2.0.1"
这个想法很简单……:读取第一个数字,然后是第二个数字,然后是第三个数字……但我无法将版本号转换为浮点数……你也可以看到这样的版本号:
"1.0.0.0", "1.0.1.0", "2.0.0.0", "2.0.0.1", "2.0.1.0"
这更清楚地看到背后的想法是什么……但是,我怎样才能将它转换成计算机程序呢?
原文由 Tattat 发布,翻译遵循 CC BY-SA 4.0 许可协议
进行这种比较的基本思想是使用
Array.split
从输入字符串中获取零件数组,然后比较两个数组中的零件对;如果部分不相等,我们知道哪个版本更小。需要记住一些重要的细节:
这是您可以直接使用的实现代码( 带文档的要点):
这个版本比较 自然,不接受字符后缀,认为“1.7”小于“1.7.0”。可以将比较模式更改为字典顺序,并且可以使用可选的第三个参数自动对较短版本的字符串进行零填充。
这里有一个运行“单元测试”的 JSFiddle ;它是 ripper234 作品 的略微扩展版本(谢谢)。
重要说明: 此代码使用
Array.map
和Array.every
,这意味着它不会在早于 9 的 IE 版本中运行。如果你需要支持这些,你必须为缺少方法。