我有这样的JSON数据:
var jsondata = [
{
data: 'MacOS Sierra 10.12.13'
},
{
data: 'MacOS Sierra 10.12.5'
}
];
我需要在此阵列中选择最新版本的MacOS。如何更好地实施?我试过删除所有的字母数字值,并将mac版本转换为整数,但在某些情况下可能不起作用(例如101213将大于10135)。
我将非常感谢你的帮助。
我有这样的JSON数据:
var jsondata = [
{
data: 'MacOS Sierra 10.12.13'
},
{
data: 'MacOS Sierra 10.12.5'
}
];
我需要在此阵列中选择最新版本的MacOS。如何更好地实施?我试过删除所有的字母数字值,并将mac版本转换为整数,但在某些情况下可能不起作用(例如101213将大于10135)。
我将非常感谢你的帮助。
3条答案
按热度按时间1l5u6lss1#
您可以将字符串拆分为一个数组,然后比较每个元素。我写了一个简单的函数来实现这一点。像这样的东西应该能用
https://jsfiddle.net/3xmjmjsb/8/
像这样使用它
5f0d552i2#
因此,转换为
integers
的问题是,如果位数不相同,比较可能会给予错误的结果。您可以尝试向版本的每个部分添加填充,以便它们都具有相同的位数,连接这些部分,然后简单地比较数字。虽然不确定这是最好的方法,但另一种选择是按.
分割并单独比较每个部分,但第一种方法的优点是可以为每个版本获得integer
表示,可以轻松比较。然后,要从数组中获取最新版本,只需迭代该数组并存储最大值的索引和值。
下面是一个更紧凑的版本:
ftf50wuq3#
您可以使用
semver
模块来实现:npm上有4000多个其他模块使用这个模块,而不是重新实现版本解析,并且每月下载量超过2500万次,测试非常广泛。
使用该模块,您需要做的基本上是一行代码(为了可读性分成3行)
现在
console.log(newest);
打印:10.12.13
或者,如果要保留整个对象:
现在
console.log(newest);
打印:{ data: 'MacOS Sierra 10.12.13' }
记住用途:
const semver = require('semver');